从 numpy 矩阵中删除行
Remove rows from numpy matrix
我有一个整数列表,表示矩阵中的位置 (centre
)。例如,
centre = [2, 50, 100, 89]
我还有两个 numpy 矩阵,X
和 Y
。如果数字在 centre
中,我需要从矩阵中删除所有行。我可以这样做:
for each in centre:
x = numpy.delete(x, (each), axis=0)
但是,数字将全部出来,因为索引将全部出来。那么,我该怎么做呢?
只需一次完成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]])
我有一个整数列表,表示矩阵中的位置 (centre
)。例如,
centre = [2, 50, 100, 89]
我还有两个 numpy 矩阵,X
和 Y
。如果数字在 centre
中,我需要从矩阵中删除所有行。我可以这样做:
for each in centre:
x = numpy.delete(x, (each), axis=0)
但是,数字将全部出来,因为索引将全部出来。那么,我该怎么做呢?
只需一次完成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]])