[英]Numpy broadcast_to for masked array
我正在使用np.broadcast_to
函数来查看np.broadcast_to
数组,就像示例一样:
>>> x = np.array([1, 2, 3])
>>> np.broadcast_to(x, (3, 3))
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
将掩码数组传递给此函数会使我失去掩码:
>>> y = np.ma.array([1, 2, 3], mask=[False, True, False])
>>> np.broadcast_to(y, (3, 3))
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
我如何获得以下视图?
array([[1, --, 3],
[1, --, 3],
[1, --, 3]])
显然,您可以将subok
参数传递给np.broadcast_to
以保留传递数组的类型而不使用基本数组类型,但这仅广播掩码数组的数据,而不是掩码。
之后您可能应该手动广播掩码:
>>> y = np.ma.array([1, 2, 3], mask=[False, True, False])
>>> z = np.broadcast_to(y, (3, 3), subok=True)
>>> z.mask
False
>>> z.mask = np.broadcast_to(y.mask, z.shape)
>>> z
masked_array(data =
[[1 -- 3]
[1 -- 3]
[1 -- 3]],
mask =
[[False True False]
[False True False]
[False True False]],
fill_value = 999999)
我想这就是你想要的。 广播后对数组进行掩码,以便获得所需的掩码数组。
y = np.ma.array([1, 2, 3])
z = np.broadcast_to(y, (3, 3))
x = np.ma.array(z, mask=np.broadcast_to([False,True,False], (3, 3)))
x
masked_array(data =
[[1 -- 3]
[1 -- 3]
[1 -- 3]],
mask =
[[False True False]
[False True False]
[False True False]],
fill_value = 999999)
检查这是否适用于您的情况。 如果您想要不带“--”的掩码数组值
x.compressed()
array([1, 3, 1, 3, 1, 3])
有关更多信息,请参阅Masked array 文档
基于@Sandeep Kadapa 的有用结果(我缺乏评论的声誉),我构建了一个可用于查找和替换 numpy.broadcast_to 调用的函数:
import numpy as np
def ma_broadcast_to(maskedarray,tup):
initial_mask=np.ma.getmask(maskedarray)
broadcasted_mask=np.broadcast_to(initial_mask,tup)
broadcasted_array=np.broadcast_to(maskedarray,tup)
return np.ma.array(broadcasted_array, mask=broadcasted_mask)
并应用于OP
y = np.ma.array([1, 2, 3], mask=[False, True, False])
ma_broadcast_to(y,(3,3))
返回
masked_array(
data=[[1, --, 3],
[1, --, 3],
[1, --, 3]],
mask=[[False, True, False],
[False, True, False],
[False, True, False]],
fill_value=999999)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.