Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数组单个元素算法的NumPy性能_Python_Numpy - Fatal编程技术网

Python 数组单个元素算法的NumPy性能

Python 数组单个元素算法的NumPy性能,python,numpy,Python,Numpy,我对NumPy的性能感兴趣,当涉及到检查元素及其关联(例如,相邻元素)的条件是否为真并根据条件分配值的算法时 一个例子可能是:(我现在编的) 我随机生成一个包含1和0的二维数组。 然后我检查数组的第一个元素是否与其相邻元素相同 如果相似的元素占多数,我将切换(0->1或1->0)该特定元素 然后我进入下一个元素 我猜这种元素状态和元素操作对于NumPy来说相当慢,有没有办法提高性能 例如,使用dbool类型创建数组并调整代码是否有帮助 提前谢谢。可能会对您有所帮助。看起来您正在进行某种图

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

一个例子可能是:(我现在编的)

  • 我随机生成一个包含1和0的二维数组。
    • 然后我检查数组的第一个元素是否与其相邻元素相同
    • 如果相似的元素占多数,我将切换(0->1或1->0)该特定元素
  • 然后我进入下一个元素
我猜这种元素状态和元素操作对于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进行元素操作,得到结果。

是的,这是对我编造的例子的一个巧妙的回答。但这是一个相当普遍的问题,我不知道这可以用卷积方法来完成。我的问题或多或少是关于一个任意条件和一个任意元素操作。这不是一个常见的解决方案,如果你想做一些只能由元素为循环计算的操作,你可以通过cython、SWIG构建一个扩展模块,或者通过weave将c代码直接嵌入到你的python代码中。但在此之前,请先尝试图像处理方法,如卷积、形态学图像处理。