从numpy矩阵中移除行

2024-04-28 05:51:10 发布

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

我有一个表示矩阵中位置的整数列表(centre)。例如

centre = [2, 50, 100, 89]

我还有两个numpy矩阵,XY。如果数字在centre中,我需要从矩阵中删除所有行。我可以做到:

for each in centre:
  x = numpy.delete(x, (each), axis=0)

然而,这些数据将全部出局,因为指数将全部出局。那么,我该怎么做呢?


Tags: 数据innumpy列表for矩阵数字整数
1条回答
网友
1楼 · 发布于 2024-04-28 05:51:10

只需在一个调用中执行delete

In [266]: B
Out[266]: 
array([[ 2,  4,  6],
       [ 8, 10, 12],
       [14, 16, 18],
       [20, 22, 24]])
In [267]: B1=np.delete(B,[1,3],axis=0)
In [268]: B1
Out[268]: 
array([[ 2,  4,  6],
       [14, 16, 18]])

你的问题有点混乱。我假设您希望按索引号删除行,而不是按某种内容删除行(不像列表find)。

但是,如果必须迭代(如使用列表),请按相反的顺序执行-这样索引就不会弄乱。您可能必须首先对索引进行排序(np.delete不需要这样做)。

In [269]: B1=B.copy()
In [270]: for i in [1,3][::-1]:
     ...:     B1=np.delete(B1,i,axis=0)

必须迭代的列表示例:

In [276]: B1=list(range(10))
In [277]: for i in [1,3,5,7][::-1]:
     ...:     del B1[i]
In [278]: B1
Out[278]: [0, 2, 4, 6, 8, 9]

=====

有了这样的列表输入,np.delete就相当于:

In [285]: mask=np.ones((4,),bool)
In [286]: mask[[1,3]]=False
In [287]: mask
Out[287]: array([ True, False,  True, False], dtype=bool)
In [288]: B[mask,:]
Out[288]: 
array([[ 2,  4,  6],
       [14, 16, 18]])

相关问题 更多 >