我有以下虚拟数据:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
Scope = "openid profile email roles"
});
我的问题是由于要获取更大的数组和其他内容,所以由于速度原因,我想使用Numpy(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]
)来模拟final
中看到的循环。但是输出是不一样的,我一直在尝试不同的东西,但是我似乎无法弄清楚该怎么做,甚至可能吗?
final2
的输出是:
final
应位于[275.3622303 16.59404201 16.59404201]
中的位置:
final2
也许我对此一无所知,但我只是看不到该怎么做。
答案 0 :(得分:2)
直接将数组直接用于相同的表达式并沿第一个轴求和-
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
答案 1 :(得分:1)
您可以使用广播来做到这一点:
np.sum(
(x[None, :] ** (1 / n_values[:, None])) * (y[None, :] / tot_value),
axis=1
) ** n_values