python - 涉及不同轴的 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]]])
解决方案
推荐阅读
- mysql - 在存储过程中使用参数获取动态表名
- reporting-services - TFS 报告:查询具有特定迭代路径的项目检索已移动到另一个迭代的项目
- android - 从 SharedPreferences 中删除一个 ArrayList
- algorithm - 对于“小型”数据集,插入排序是一个不错的选择。什么是“小”?
- css - 多行文本使 svg 缩小
- ruby-on-rails - 种子文件中的 Rails 图像
- csv - ArangoDB 示例图数据丢失 flight.csv
- javascript - 除非我在调试,否则 ChartJS 不会读取数据
- java - 如何更改 JFoenix 拾色器库的 CSS 样式?
- php - 无法反序列化字符串