我有一个 N*K
维 numpy 数组 X
并想要构造 N*(K-1)
维 numpy 数组 Y
通过删除第一行的元素 1、第二行的元素 3、第四行的元素 1 .... 第 N 行的元素 j。
应删除的第 th 个元素的索引存储在 N*1 维向量t
中。有没有简单的方法可以做到这一点?
最佳答案
您可以构建一个 bool 选择蒙版:
mask = np.ones_like(X, dtype='bool')
mask[np.arange(X.shape[0]), idx] = 0
这将使定义 Y
和 t
变得容易:
import numpy as np
N, K = 3, 4
X = np.arange(N*K).reshape(N,K)
# idx indicates which element you wish to remove from each row
idx = np.arange(N)
mask = np.ones_like(X, dtype='bool')
mask[np.arange(X.shape[0]), idx] = 0
Y = X[mask].reshape(N, K-1)
t = X[~mask]
产量
In [17]: X
Out[17]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [15]: Y
Out[15]:
array([[ 1, 2, 3],
[ 4, 6, 7],
[ 8, 9, 11]])
In [16]: t
Out[16]: array([ 0, 5, 10])
关于python - Numpy 数组,每行删除一个任意元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28913704/