我有一个矩阵[n x 3]。我要指定行:
test_row = np.array([a, b, c])
并将其从我的矩阵中删除。
是否有比在整个矩阵上使用for和np.array_equal
更好的方法?
答案 0 :(得分:0)
删除所需行的另一种方法是,如果您碰巧知道要删除的行的索引,则可以简单地对剩余的行进行切片并将其连接成矩阵,如下所示:下面的示例:
In [8]: arr = np.arange(5*3).reshape(5, 3)
In [9]: arr
Out[9]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14]])
In [10]: remove_row_idx = 2
In [11]: np.vstack((arr[:remove_row_idx, :], arr[remove_row_idx+1:,]))
Out[11]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 9, 10, 11],
[12, 13, 14]])
答案 1 :(得分:0)
In [318]: arr = np.arange(24).reshape(8,3)
In [319]: test = np.array([6,7,8])
2:之间的全数组比较
In [322]: np.isin(arr,test)
Out[322]:
array([[False, False, False],
[False, False, False],
[ True, True, True],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]])
找到所有词语均匹配的行:
In [323]: np.isin(arr,test).all(axis=1)
Out[323]: array([False, False, True, False, False, False, False, False])
使用其倒数作为掩码来选择守护者行:
In [324]: arr[~_]
Out[324]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23]])
isin
实际上是in1d
加上重塑:
In [327]: np.in1d(arr,test)
Out[327]:
array([False, False, False, False, False, False, True, True, True,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False])
In [328]: np.in1d(arr,test).reshape(arr.shape)
Out[328]:
array([[False, False, False],
[False, False, False],
[ True, True, True],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]])
此广播比较也适用:
(arr[:,None,:]==test[None,:,None]).any(axis=1).all(axis=1)