使用花哨的索引从 Numpy 数组中查找和删除全零列
Posted
技术标签:
【中文标题】使用花哨的索引从 Numpy 数组中查找和删除全零列【英文标题】:Find and delete all-zero columns from Numpy array using fancy indexing 【发布时间】:2019-01-17 02:13:34 【问题描述】:如何在 numpy 数组中找到全为零的列,然后从数组中删除它们?我正在寻找一种方法来获取列索引,然后使用这些索引进行删除。
【问题讨论】:
【参考方案1】:您可以使用np.argwhere
和np.all
来查找您的索引。要删除它们,请使用np.delete
。
示例:
找到您的 0
列:
a = np.array([[1, 2, 0, 3, 0],
[4, 5, 0, 6, 0],
[7, 8, 0, 9, 0]])
idx = np.argwhere(np.all(a[..., :] == 0, axis=0))
>>> idx
array([[2],
[4]])
删除您的列
a2 = np.delete(a, idx, axis=1)
>>> a2
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
【讨论】:
【参考方案2】:这是我得到的解决方案
假设OriginMat
是原始数据的矩阵,
Result
是我要放置结果的矩阵,然后
Result = OriginMat[:,~np.all(OriginMat == 0, axis = 0)]
打破它会是
检查列(轴 0)的值是否为 0 并否定这个值,所以零列被视为假
~np.all(OriginMat == 0, axis = 0)
生成的矩阵将是一个带有 False 的向量,其中所有元素 为 0,不为 True 时
最后一步只是选择 True 的列(因此不是 0)
感谢以下网站,我得到了这个解决方案:
https://www.science-emergence.com/Articles/How-to-remove-array-rows-that-contain-only-0-in-python/
【讨论】:
这很好用而且非常优雅,我认为这应该是公认的答案。【参考方案3】:# Some random array of 1's and 0's
x = np.random.randint(0,2, size=(3, 100))
# Find where all values in the columns are zero
mask = (x == 0).all(0)
# Find the indices of these columns
column_indices = np.where(mask)[0]
# Update x to only include the columns where non-zero values occur.
x = x[:,~mask]
【讨论】:
以上是关于使用花哨的索引从 Numpy 数组中查找和删除全零列的主要内容,如果未能解决你的问题,请参考以下文章