python - Numpy:在 2D bool 数组中逐项快速计算 True 实例

标签 python arrays numpy

我有一个二维 bool 数组,例如:

[[False, True, True],
[True, False, True],
[True, False, False],
[True, True, True]]

对于数组中的每一行,我想计算 True 的实例,并创建一个与原始数组形状相同的新的逐项数组,其中每个条目是该行中所有先前 True 实例的总和.对于上面的例子,我想要的输出是:

[[0, 0, 1],
[0, 1, 1],
[0, 1, 1],
[0, 1, 2]]

有没有一种方法可以在 Numpy 中快速执行此操作,而不是像这样检查数组中的每个项目:

boolarr = np.array([[0, 1, 1], [1, 0, 1], [1, 0, 0], [1, 1, 1]], dtype=np.bool)

newarr = np.zeros(boolarr.shape)

for i, row in enumerate(boolarr):
    for index, item in enumerate(row):
        if item:
            newarr[i][index+1:] += 1

我的阵列足够大 (40 x 1260),速度是一个因素,因为这需要重复多次。

谢谢。

最佳答案

cumsum 是你的 friend !它是累积总和的缩写,你可以给它一个“轴”来处理,在你的情况下尝试运行:

np.cumsum(boolarr,axis=1) - boolarr

减法只是减去“当前”值。

关于python - Numpy:在 2D bool 数组中逐项快速计算 True 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255532/

相关文章:

python - 添加类对象的实例变量

java - 如何在java中初始化一个二维字符串数组

python - 使用 np.std 作为函数参数的 Pandas apply 函数输出不一致

排除多个换行符的 Python 正则表达式

python - 如何避免 Django 中的模板重复?

python - 防止按下 Tab 键时特定的 QLineEdit 聚焦

java - 重新打印一个字符串数组Java

c - (在 C 中)使用数组实现堆栈 - 将数组大小时加倍时出现运行时错误

python - 使用 numpy 数组与 DataFrame 屏蔽 pandas DataFrame

c++ - numpy 比 eigen 这样的 c++ 线性代数库慢吗?