python - 在 for 循环内删除 np 数组中的行

标签 python arrays numpy rowdeleting

我正在尝试删除列表“a”中包含的多个二维数组中包含一个或更少非零元素的所有行。

当我在“i”循环之外运行该方法时,此方法有效,但整体上不起作用。我知道我无法删除正在迭代的行,但我相信在这种情况下我不会这样做,因为我只删除 a 中包含的数组中的行,而不是数组本身。

for i in range(len(a)):
  del_idx=[]
  for j in range(len(a[i])):
    nonzero=np.nonzero(a[i][j])
    nonzero_len=len(nonzero[0]) #because np.nonzero outputs a tuple
    if nonzero_len<=1:
        del_idx.append(j)
    else:
        continue
  np.delete(a[i],(del_idx),axis=0)

有人知道这是怎么回事吗?如果这确实不起作用,如何在不使用循环的情况下删除这些元素?这是Python 2.7

谢谢!

最佳答案

当矢量化操作可用时,您应该避免使用 NumPy 进行 for 循环。例如,在这里,您可以使用 bool 索引:

import numpy as np

np.random.seed(0)

A = np.random.randint(0, 2, (10, 3))

res = A[(A != 0).sum(1) > 1]

array([[0, 1, 1],
       [0, 1, 1],
       [1, 1, 1],
       [1, 1, 0],
       [1, 1, 0],
       [0, 1, 1],
       [1, 1, 0]])

相同的逻辑可以应用于数组列表中的每个数组。

关于python - 在 for 循环内删除 np 数组中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53111617/

相关文章:

c - 在 C 函数中为二维数组分配空间?

c++ - 如何在 C++ 中为没有默认构造函数的结构初始化数组

python - 使用 nolearn-DBN 分类器时,“garray”对象没有属性 'size'

python - python : could not find a version that satisfies the requirement teradata 的 Teradata 模块

python - 如何通过spotipy检索收听历史对象?

javascript - 按对象属性值对数组进行数字排序

python - Tensorflow 2.5.0 和 Gensim 4.0.1 与 numpy 的兼容性

python - 傅立叶空间中的滤波器表现不佳

python - QThread.isFinished 在连接到 finished() 信号的插槽中返回 False

python - Python中的循环列表迭代器