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

标签 python numpy

我有一个 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

这将使定义 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])

关于python - Numpy 数组,每行删除一个任意元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28913704/

相关文章:

python - CountVectorizer 忽略大写

python - 作为函数一部分的舍入曲线拟合

python - 使用 numpy 有效找到最低的非遮蔽点

python - 查看 Python Pandas 相关矩阵条目的常见观察计数的快速方法

python - numpy random.shuffle 的意外结果

python - 遍历 Pandas 数据框中的特定列和行以执行检查

Python websockets,订阅多个 channel

python - 没有循环的Numpy求解3d线性方程

python - 如何计算 python 中图像上的红色和黄色多边形?

python - AWS Lambda 函数可以从 python 文件调用另一个普通的 python 函数吗?