python2darray,将元素从boolean mask中切片/移除,并将结果保留为2Darray

2024-09-29 23:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于使用布尔掩码屏蔽/切片2dnumpy数组的问题。这里有一个np2d数组x,它是

x=np.tile(np.arange(10).reshape(10,1),(1,10))
[[0 0 0 0 0 0 0 0 0 0]
[1 1 1 1 1 1 1 1 1 1]
[2 2 2 2 2 2 2 2 2 2]
[3 3 3 3 3 3 3 3 3 3]
[4 4 4 4 4 4 4 4 4 4]
[5 5 5 5 5 5 5 5 5 5]
[6 6 6 6 6 6 6 6 6 6]
[7 7 7 7 7 7 7 7 7 7]
[8 8 8 8 8 8 8 8 8 8]
[9 9 9 9 9 9 9 9 9 9]]

一个10乘10的数组是相同的。如果有更好的方法来产生这个,你能指出吗?谢谢。然后是一个布尔数组

^{pr2}$

现在,我想得到的数组如下所示:

[[1 0 0 0 0 0 0 0 0 0]
[2 2 1 1 1 1 1 1 1 1]
[3 3 3 2 2 2 2 2 2 2]
[4 4 4 4 3 3 3 3 3 3]
[5 5 5 5 5 4 4 4 4 4]
[6 6 6 6 6 6 5 5 5 5]
[7 7 7 7 7 7 7 6 6 6]
[8 8 8 8 8 8 8 8 7 7]
[9 9 9 9 9 9 9 9 9 8]]

移除x中在y中对应位置值为False的元素,并返回新的2D数组。我怎么能在这种情况下得到这个?在

非常感谢你的帮助。在


Tags: 方法false元素np情况切片数组屏蔽
1条回答
网友
1楼 · 发布于 2024-09-29 23:33:08

x[y]x中选择值,其中y为真。但是数组x[y]是一维的。您可以使用reshape(9,-1)将其重塑为有9行(不管有多少列都有意义)。要获得所需的结果,必须从左到右翻转数组:

In [81]: np.fliplr(x[y].reshape(9,-1))
Out[84]: 
array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [2, 2, 1, 1, 1, 1, 1, 1, 1, 1],
       [3, 3, 3, 2, 2, 2, 2, 2, 2, 2],
       [4, 4, 4, 4, 3, 3, 3, 3, 3, 3],
       [5, 5, 5, 5, 5, 4, 4, 4, 4, 4],
       [6, 6, 6, 6, 6, 6, 5, 5, 5, 5],
       [7, 7, 7, 7, 7, 7, 7, 6, 6, 6],
       [8, 8, 8, 8, 8, 8, 8, 8, 7, 7],
       [9, 9, 9, 9, 9, 9, 9, 9, 9, 8]])

相关问题 更多 >

    热门问题