我正在研究如何加速我的函数。这个函数会用到许多相同大小的二维数组。我想将它们合并成一个4D数组,其中最后两个维度为3x3,并在以后获取整个数组的特征值。
我已经使用了两个嵌套的
我使用
我已经使用了两个嵌套的
for
循环来实现,但速度比我想要的慢一些,所以有没有好的方法可以加速代码?def principal(xx, xy, xz, yy, yz, zz):
import numpy as np
xx = np.array(xx)
xy = np.array(xy)
xz = np.array(xz)
yy = np.array(yy)
yz = np.array(yz)
zz = np.array(zz)
size = np.shape(xx)
Princ = np.empty((size[1], size[0], 3, 3))
for j in range(size[1]):
for i in range(size[0]):
Princ[j, i, :, :] = np.array([[xx[i, j], xy[i, j], xz[i, j]],
[xy[i, j], yy[i, j], yz[i, j]],
[xz[i, j], yz[i, j], zz[i, j]]])
Princ = np.linalg.eigvalsh(Princ)
return Princ
import numpy as np
number_arrays_1 = 3
number_arrays_2 = 4
xx = np.ones((number_arrays_1, number_arrays_2))*80
xy = np.ones((number_arrays_1, number_arrays_2))*30
xz = np.ones((number_arrays_1, number_arrays_2))*0
yy = np.ones((number_arrays_1, number_arrays_2))*40
yz = np.ones((number_arrays_1, number_arrays_2))*0
zz = np.ones((number_arrays_1, number_arrays_2))*60
Princ = principal(xx, xy, xz, yy, yz, zz)
print(Princ)
我使用
xx = np.array(xx)
进行转换的原因是在较大的程序中,我将一个pandas dataframe而不是numpy数组传递到函数中。
xx
等是否总是np.ones(....)*c
?还是这只是为了方便举例而已? - hpaulj...values()
可能比调用np.array(...)
更快。 - Mad Physicist