NumPy对于涉及阵列的各个元素的算法的性能

时间:2011-08-12 10:40:42

标签: python numpy

我对NumPy的性能感兴趣,当涉及到检查元素及其隶属关系(例如相邻元素)的条件是否为True并根据条件分配值的算法时。

一个例子可能是:(我现在开始做)

  • 我随机生成一个1和0的2d数组。
    • 然后我检查数组的第一个元素是否与其邻居相同。
    • 如果类似的是大多数,我会切换(0 - > 1或1 - > 0)特定元素。
  • 然后我继续下一个元素。

我猜NumPy这种元素明智的条件和元素操作相当慢,有没有办法让我的表现更好?

例如,如果使用dbool类型创建数组并调整代码,它会有帮助吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

看起来你正在进行某种图像处理,你可以试试scipy.ndimage。

from scipy.ndimage import convolve
import numpy as np
np.random.seed(0)
x = np.random.randint(0,2,(5,5))

print x

w = np.ones((3,3), dtype=np.int8)
w[1,1] = 0
y = convolve(x, w, mode="constant")

print y

输出是:

[[0 1 1 0 1]
 [1 1 1 1 1]
 [1 0 0 1 0]
 [0 0 0 0 1]
 [0 1 1 0 0]]

[[3 4 4 5 2]
 [3 5 5 5 3]
 [2 4 4 4 4]
 [2 3 3 3 1]
 [1 1 1 2 1]]

y是每个元素的邻居之和。对所有这些进行相同的卷积,你得到每个元素的邻居数量:

>>> n = convolve(np.ones((5,5),np.int8), w, mode="constant")
>>> n
[[3 5 5 5 3]
 [5 8 8 8 5]
 [5 8 8 8 5]
 [5 8 8 8 5]
 [3 5 5 5 3]]

然后你可以用x,y,n做元素操作,并得到你的结果。