Меня интересует производительность NumPy, когда речь заходит об алгоритмах, которые проверяют, является ли условие Истинным для элемента и его принадлежности (например, соседние элементы) и присваивает значение в соответствии с условием.
Примером может быть: (я делаю это сейчас)
Я полагаю, что этот вид элементарных условий и элементарных операций довольно медленный с NumPy, есть ли способ, чтобы я мог улучшить производительность?
Например, создав массив с типом dbool и настроив код, поможет ли он?
Заранее спасибо.
Похоже, что вы делаете какую-то обработку изображений, вы можете попробовать 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 и получать результат.
Возможно, вам поможет http://www.scipy.org/Cookbook/GameOfLifeStrides.