首页 > 解决方案 > 涉及不同轴的 Numpy 矢量化操作

问题描述

我有三轴的 numpy 数组。我用n索引轴,第二个用n'索引,第三个用k索引。第一个和第二个轴的尺寸为 R,第三个轴的尺寸为 K。我有以下形状的变量:

R = 2
K = 2
w = np.random.uniform(low = 1,high = 3, size = (R,1,K))
lamb = np.random.uniform(low = 1,high = 3, size = (R,1,K)) 
L = np.random.uniform(low = 1,high = 3, size = (R,1,K)) 
Phi = np.random.uniform(low = 1,high = 3, size = (R,1,1))
epsilon = 2
tauy  = 0.5

我想计算混合来自不同轴的值的矢量化表达式。例如:

for i_n in range(0, R):
    print(f'n={i_n}')
    Kn = (lamb[i_n,0,1]/lamb[i_n,0,0])**(1-epsilon)*(L[i_n,0,0]/lamb[i_n,0,1])**(1-epsilon)
    wsol = (((1/(1+Phi[i_n,0,0]*tauy)))**(1-epsilon)*(lamb[i_n,0,1]*lamb[i_n,0,0])**(1-epsilon)*(1/(lamb[i_n,0,1]**(1-epsilon) + 
                                                                                   (Kn*lamb[i_n,0,0])**(1-epsilon))
                                                                               ))**(1/(1-epsilon))
    print(f'Low: {wsol}')
    w[i_n,0,0] = wsol
    w[i_n,0,1] = Kn*wsol

如何简单地使用矢量化操作来执行上述操作w, L, lamb,而不是依赖于这个循环?

作为参考,我想做的是(上面代码中的 k = $\ell$ = 0 和 k = h = 1)

在此处输入图像描述

编辑

在@hpaulj 的评论之后:

Kn = (lamb[:,0,1]/lamb[:,0,0])**(1-epsilon)*(L[:,0,0]/lamb[:,0,1])**(1-epsilon)
wsol = (((1/(1+Phi[:,0,0]*tauy)))**(1-epsilon)*(lamb[:,0,1]*lamb[:,0,0])**(1-epsilon)*(1/(lamb[:,0,1]**(1-epsilon) + 
                                                                               (Kn*lamb[:,0,0])**(1-epsilon))
                                                                           ))**(1/(1-epsilon))
w2[:,0,0] = wsol
w2[:,0,1] = Kn*wsol
w2 == w
array([[[ True,  True]],

       [[ True,  True]]])

标签: pythonnumpy

解决方案


推荐阅读