我有一个N*K
维度numpy数组X
,想要通过删除第一行的元素1来构造N*(K-1)
维度numpy数组Y
第二行,第四行的元素1 ....第N行的元素j。
应该删除的元素的索引存储在N * 1维向量t
中。有一个简单的方法吗?
答案 0 :(得分:1)
您可以构建一个布尔选择掩码:
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])