Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Numpy中将二维或一维屏蔽数组索引为一维数组的有效通用代码_Python_Arrays_Numpy_Multidimensional Array_Dimensions - Fatal编程技术网

Python 在Numpy中将二维或一维屏蔽数组索引为一维数组的有效通用代码

Python 在Numpy中将二维或一维屏蔽数组索引为一维数组的有效通用代码,python,arrays,numpy,multidimensional-array,dimensions,Python,Arrays,Numpy,Multidimensional Array,Dimensions,我想要一个有效的二维或一维掩码数组代码,以便从中提取一维数组。在2D情况下,一列将被完全屏蔽并应移除(如图所示) 要实现这一点,有效的Python代码是什么 子问题:令我惊讶的是,在我的尝试中,以下几点确实起了作用: b = b[:, ~np.all(b.mask, axis=0)].squeeze() print(b) # [1 3 5 7 9 11 -- 15 17 19] 为什么我没有得到一个索引器错误:当我对这个1D数组使用2D索引时,数组的索引太多了错误 有没有更好的办法来解决最初的

我想要一个有效的二维或一维掩码数组代码,以便从中提取一维数组。在2D情况下,一列将被完全屏蔽并应移除(如图所示)

要实现这一点,有效的Python代码是什么

子问题:令我惊讶的是,在我的尝试中,以下几点确实起了作用:

b = b[:, ~np.all(b.mask, axis=0)].squeeze()
print(b)
# [1 3 5 7 9 11 -- 15 17 19]
为什么我没有得到一个
索引器错误:当我对这个1D数组使用2D索引时,数组的索引太多了
错误


有没有更好的办法来解决最初的问题?谢谢

对于这两种情况(1D和2D),都可以使用
a=a[:,~np.all(a.mask,axis=0)].squence()


在示例的1D示例中,您得到
b[:,~np.all(b.mask,axis=0)]
,即
b[:,True]
。这似乎会引发索引错误,但
True
的行为类似于
np。在这种情况下,newaxis
,即
b[:,True]
的结果是一个形状数组
(10,1)
。看看为什么会这样,以及背后的动机是什么(答案与0维情况有关,但结果证明对更高维度也同样有效)<代码>挤压
然后删除这个额外的维度,这样你就不会注意到它了。

b可以用与a相同的方式来处理-
b[:,~np.all(b.mask,axis=0)]。挤压()
?这很讽刺-我刚刚删除了我问题的2d部分(认为这会使事情变得太模糊-然后我又把它放回去了)。因此,我确实同意你的看法,这是可行的,尽管我真的不明白为什么这不会抛出一个
索引器。此外,这意味着这将是一个很好的方式继续进行呢?(我期待着其他更好/更智能的解决方案,包括奇特的索引、新轴创建等)您认为您在哪里使用2D索引?1D数组也有一个轴“0”。我想是因为
[…,…]
让我认为我在索引所有行
,然后是一些列
~np.all()
。。。如果这是一种合适的方式,并且没有其他(更好的?)出现,那么最好的办法可能是发展你的评论(也许是解决我的困惑?)作为我接受的答案?(如果我们不能使它变得有用,那么我会删除不污染环境的问题)。无论如何谢谢你!或者,对不起,我的错-现在我明白你的意思了,但是我没有一个很好的解释为什么它可以工作,所以把问题留在这里,我会考虑一下,或者其他人可以通过相关文档的链接来澄清它。
b = b[:, ~np.all(b.mask, axis=0)].squeeze()
print(b)
# [1 3 5 7 9 11 -- 15 17 19]