我有以下虚拟数据:
import numpy as numpy
x = np.linspace(1, 10, 10)
y = np.linspace(1, 10, 10)
x[::-1].sort()
y[::-1].sort()
tot_value = np.sum(y)
n_values = np.array([1, 2, 3])
final = np.sum((x[:, np.newaxis]**(1/n_values))*(y[:, np.newaxis]/tot_value))**n_values
final2 = [np.sum((x[:, np.newaxis]**(1/i))*(y[:, np.newaxis]/tot_value))**i for i in n_values]
我的问题是由于要获取更大的数组和其他内容时的速度,我想使用Numpy(
final
)来模拟final2
中看到的循环。但是输出是不一样的,我一直在尝试不同的东西,但是我似乎无法弄清楚该怎么做,甚至可能吗?final
的输出为:[275.3622303 16.59404201 16.59404201]
final2
中的位置:[6.7290539608469775, 7.0, 7.0]
也许我对此视而不见,但是我只是看不到该怎么做。
最佳答案
只需将数组直接用于相同的表达式并沿第一个轴求和-
i = n_values
out = np.sum((x[:, np.newaxis]**(1/i))*(y[:, np.newaxis]/tot_value),axis=0)**i
einsum
另一个性能更高的-out = np.einsum('ij,ij->j',x[:, np.newaxis]**(1/i),y[:, np.newaxis]/tot_value)**i
matrix-multiplication
还有更多-out = (y/tot_value).dot(x[:, np.newaxis]**(1/i))**i
关于python - 使用Numpy代替循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52184885/