2024-04-28 05:51:10 发布
网友
我有一个表示矩阵中位置的整数列表(centre)。例如
centre
centre = [2, 50, 100, 89]
我还有两个numpy矩阵,X和Y。如果数字在centre中,我需要从矩阵中删除所有行。我可以做到:
X
Y
for each in centre: x = numpy.delete(x, (each), axis=0)
然而,这些数据将全部出局,因为指数将全部出局。那么,我该怎么做呢?
只需在一个调用中执行delete:
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)。
find
但是,如果必须迭代(如使用列表),请按相反的顺序执行-这样索引就不会弄乱。您可能必须首先对索引进行排序(np.delete不需要这样做)。
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]])
只需在一个调用中执行
delete
:你的问题有点混乱。我假设您希望按索引号删除行,而不是按某种内容删除行(不像列表
find
)。但是,如果必须迭代(如使用列表),请按相反的顺序执行-这样索引就不会弄乱。您可能必须首先对索引进行排序(
np.delete
不需要这样做)。必须迭代的列表示例:
=====
有了这样的列表输入,
np.delete
就相当于:相关问题 更多 >
编程相关推荐