python - 检查 numpy 数组中的不变列

标签 python arrays numpy

我有一个大的二维 numpy 字符数组 a (dtype='a1'),并且想要找到始终包含相同字符的不变列。下面的代码可以工作,但是速度很慢。

var_col = np.zeros(a.shape[1], dtype='bool')
for c in xrange(a.shape[1]):
    if not all(a[:,c] == a[0,c]):
        var_col[c] = True

有没有更快的方法来解决这个问题? 谢谢!

最佳答案

这是一种方法,使用带有 == 运算符的广播。

首先创建一个测试数组。

In [27]: np.random.seed(1)

In [28]: a = np.random.choice(list("AABC"), size=(3,9))

In [29]: a
Out[29]: 
array([['A', 'C', 'A', 'A', 'C', 'A', 'C', 'A', 'C'],
       ['A', 'A', 'A', 'A', 'C', 'A', 'A', 'B', 'A'],
       ['B', 'A', 'B', 'A', 'B', 'A', 'C', 'A', 'B']], 
      dtype='|S1')

将每个元素与其列顶部的元素进行比较。 a[0] 是第一行;它是一个一维数组(形状为 (9,))。当我们将 == 与这样的两个数组一起使用时,a[0] 被“广播”,就像形状为 (3,9) 的数组一样,填充了第一行。

In [30]: a == a[0]
Out[30]: 
array([[ True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True, False,  True,  True,  True,  True, False, False, False],
       [False, False, False,  True, False,  True,  True,  True, False]], dtype=bool)

现在沿比较结果的第一个轴使用all

In [31]: np.all(a == a[0], axis=0)
Out[31]: array([False, False, False,  True, False,  True, False, False, False], dtype=bool)

关于python - 检查 numpy 数组中的不变列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22660733/

相关文章:

python - QIcon.fromTheme 在 PyQt 中不显示图标

python - 使用python从时间戳中提取小时

php - 如何对多维数组中的特定键进行求和和计数

python - 在 Python 中自动比较 Winmerge

python - 如何修复比较简单数据后生成的Python中的 'The truth value of a Series is ambiguous'

python - 如何将 mysql-connector-python 与 MAMP 一起使用?

arrays - 字符串和数组的集差

javascript - 在MVC中获取从View到Controller的数组属性?

用于 Gauss-Seidel 迭代求解器的 Python 库?

python - 通过平均或重新组合一个 numpy 2d 数组来调整大小