Numpy数组,每行删除一个任意元素

时间:2015-03-07 10:08:36

标签: python numpy

我有一个N*K维度numpy数组X,想要通过删除第一行的元素1来构造N*(K-1)维度numpy数组Y第二行,第四行的元素1 ....第N行的元素j。 应该删除的元素的索引存储在N * 1维向量t中。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以构建一个布尔选择掩码:

mask = np.ones_like(X, dtype='bool')
mask[np.arange(X.shape[0]), idx] = 0

可以轻松定义Yt

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])