我有一些填充了0
和1
的2D数组:
import numpy as np
a = np.random.randint(2, size=(20, 20))
b = np.random.randint(2, size=(20, 20))
c = np.random.randint(2, size=(20, 20))
d = np.random.randint(2, size=(20, 20))
我想计算周期性边界的连续出现次数。 这意味着(在1D中为清晰起见):
[1 1 0 0 1 1 0 1 1 1]
应该给我5
(最后三个元素+前两个元素)。
2D数组应该在第三个轴(如果从0开始的话是第二个轴)进行比较/计数,比如首先将数组堆叠在axis=2
中,然后应用与1D相同的算法。但是我不确定这是否是最简单的方法。你知道吗
对于
2D
的ndarraysa
和更高的dim数组,这是一种提高性能效率的方法-示例运行-
这是一条两行线,诚然有一条很长的线:
工作原理:
让我们首先忽略环绕,考虑一个简单的示例:a=[1 0 0 1 0 1 1 1 0] 我们想把它转换成b=[1 0 0 1 2 0 1 2 3 0],所以我们可以简单地取最大值。生成b的一种方法是取arange r=[1 2 3 4 5 6 7 8 9 10],减去aux=[0 2 3 3 6 6 10]。我们用r乘以(1-a)得到[0 2 3 0 0 6 0 0 0 0 10]并取累积最大值。你知道吗
为了处理环绕,我们简单地把两个副本一个接一个,然后使用上面的。你知道吗
下面是代码再次分解为更小的位并注释:
您可以从
itertools
使用groupby
:相关问题 更多 >
编程相关推荐