我对NumPy的性能感兴趣,当涉及到检查元素及其隶属关系(例如相邻元素)的条件是否为True并根据条件分配值的算法时。
一个例子可能是:(我现在开始做)
我猜NumPy这种元素明智的条件和元素操作相当慢,有没有办法让我的表现更好?
例如,如果使用dbool类型创建数组并调整代码,它会有帮助吗?
提前致谢。
答案 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做元素操作,并得到你的结果。