Python 屏蔽阵列的Numpy广播_to
我正在使用Python 屏蔽阵列的Numpy广播_to,python,numpy,masked-array,Python,Numpy,Masked Array,我正在使用np.broadcast\u 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, Tru
np.broadcast\u 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]])
我想这就是你想要的。广播后屏蔽阵列,以便获得所需的屏蔽阵列
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)
检查这是否适用于您的案例。
如果希望掩码数组值不带“---”
要了解更多信息,请浏览,显然,您可以将
subok
参数传递到np.broadcast\u 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)
基于@Sandeep Kadapa的有益结果(我缺乏评论的声誉), 我构建了一个函数,可用于查找和替换numpy.broadcast_的调用,以:
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)
--
不是有效的Numpy或Python标识符。--
应该是什么?无?@Kasramvd--
用于显示屏蔽数组的屏蔽项。我希望在np.broadcast\u
中传递subok=True
,以返回所需的结果,但不幸的是,它没有。掩码不会被广播。通常,numpy函数不“知道”掩码数组。他们倾向于只使用数据
部分np.ma
函数可以工作,将任务委托给屏蔽方法的函数也可以工作。是的,应该可以工作。我可以传递y.mask
而不是[0,1,0]
,使其更通用。在'np.ma.array'函数中,copy
参数也默认为False
,因此它应该返回一个视图。谢谢,欢迎光临@邓肯
masked_array(
data=[[1, --, 3],
[1, --, 3],
[1, --, 3]],
mask=[[False, True, False],
[False, True, False],
[False, True, False]],
fill_value=999999)