Arrays Jython阵列上的数学运算

Arrays Jython阵列上的数学运算,arrays,jython,Arrays,Jython,我试图以以下方式对Jython数组的每个元素进行简单的数学运算: import math for i in xrange (x*y*z): medfiltArray[i] = 2 * math.sqrt(medfiltArray[i] + (3.0/8.0) ) InputImgArray[i] = 2 * math.sqrt(InputImgArray[i] + (3.0/8.0) ) 问题是我的数组太大(8388608个元素),这个过程需要12秒多一点。有没有更有效的

我试图以以下方式对Jython数组的每个元素进行简单的数学运算:

import math

for i in xrange (x*y*z):
    medfiltArray[i] = 2 * math.sqrt(medfiltArray[i] + (3.0/8.0)  )
    InputImgArray[i] = 2 * math.sqrt(InputImgArray[i] + (3.0/8.0)  )
问题是我的数组太大(8388608个元素),这个过程需要12秒多一点。有没有更有效的方法来完成整个过程?我找到了一个稍微快一点的方法(大约7秒):

与此方法相比,for循环的优点是,我可以同时修改多个相同大小的数组,从而节省网络时间。但尽管如此,这仍然非常缓慢。在MATLAB中,修改矩阵只需不到一秒钟:

img = 2 * sqrt(img + (3/8));

任何关于在Jython中修改阵列的提示都将不胜感激。谢谢

Python附带电池,但没有好的矩阵电池。幸运的是,NumPy解决了这个问题,但不幸的是,从个人经验来看,我不知道Jython的替代方案,只有一些搜索结果显示:jnumeric(似乎过时了),(也过时了?),以及它的SO链接:

在任何情况下,一个简单的CPython/numpy示例可能如下所示:

import numpy as np

# dummy init values:
x = 800
y = 100
z = 100
length = x*y*z
medfiltArray = np.arange(length, dtype='f')
InputImgArray = np.arange(length, dtype='f')

# m is a constant, no reason to recalculate it 8million times
m = (3.0/8.0)
medfiltArray = 2 * np.sqrt(medfiltArray + m)
InputImgArray = 2 * np.sqrt(InputImgArray + m)

# timed, it runs in:
# real  0m0.161s
# user  0m0.131s
# sys   0m0.032s

祝你好运找到Jython替代品,我希望这会让你走上正确的道路。

有一个名为的快速向量和矩阵java库。Vectorz可以在Jython中导入,并在大约200毫秒内完成我问题中描述的计算。用户必须从Jython中的python(或java)数组切换到Vectorz数组。还有另一个解决方案,如果你正在做图像处理(像我一样),有一个叫做ImageJ的程序,它具有广泛的功能。我正在开发ImageJ插件,要执行这些数学操作,您还可以使用内部ImageJ数学命令:

IJ.run(InputImg, "32-bit", ""); 
IJ.run(InputImg, "Add...", "value=0.375 stack"); 
IJ.run(InputImg, "Square Root", "stack"); 
IJ.run(InputImg, "Multiply...", "value=2 stack"); 

这只需要0.1秒

谢谢你。如果Jython允许使用numpy软件包,我的生活会轻松得多。我们将尝试在Java中找到与此等效的东西。
IJ.run(InputImg, "32-bit", ""); 
IJ.run(InputImg, "Add...", "value=0.375 stack"); 
IJ.run(InputImg, "Square Root", "stack"); 
IJ.run(InputImg, "Multiply...", "value=2 stack");