如何在Python或NumPy循环中计算这个等式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python或NumPy循环中计算这个等式?相关的知识,希望对你有一定的参考价值。
在Python(或NumPy,如果你认为这种操作首选)的循环中计算它的最佳方法是什么?
KT = K0[1]*Var0 + K1[1]*Var1 + K2[1]*Var2 + K3[1]*Var3 +
K0[2]*Var0 + K1[2]*Var1 + K2[2]*Var2 + K3[2]*Var3 +
...
K0[51]*Var0 + K1[51]*Var1 + K2[51]*Var2 + K3[51]*Var3
其中K0是一个数组,包含51个系数(浮点数)。对于K1,K2和K3也是如此。 Var0,Var1,Var2和Var3是常量。
KT是结果,取决于Var0,... Var3。系数数组总是相同的。他们不会改变。
我来自Fortran,目前正在学习/试验Python,所以原谅或许是新手问题。 Python循环有时对我来说不直观。
答案
用你的51 X 4
和K
制作一个4 X 1
数组和X
数组并乘以。 Numpy有一种称为广播的东西,它将X扩展为与K的每一行相乘。
import numpy as np
K = np.column_stack([k0, k1, k2, k3])
X = np.array([x0, x1, x2, x3])
result = K * X
另一答案
num1 = np.multiply(K0, var0) # type: numpy array
num2 = np.multiply(K1, var1)
num3 = np.multiply(K2, var2)
num4 = np.multiply(K3, var3)
# (num1 + num2 + num3 + num4) will give a single numpy array and then sum() operation will give you summation of all elemnts
KT = (num1 + num2 + num3 + num4).sum()
另一答案
- 将Vars修复为numpy数组[Var0,Var1,..,VarN]
- 修复K是阵列的数组[[K11,K12,..,K1N] [K21,K22,..,K2N],...]
- 写一个lambda函数用于乘以Var_row * K_row
- 使用numpy(np.vectorize)向量化此函数
- 在数据量上应用矢量化函数(2)
- 快乐=)
草稿:
V_arr = np.array([2, 2, 2, 2])
K_arr = np.array([[1, 2, 3, 4],[4, 3, 2, 1],[5, 4, 4, 4]])
def mult_arr(a, b):
return a * b
mult_vector = np.vectorize(mult_arr)
res = mult_vector(K_arr, V_arr)
以上是关于如何在Python或NumPy循环中计算这个等式?的主要内容,如果未能解决你的问题,请参考以下文章
不用循环,python numpy 数组如何对每个元素进行操作?
Python:重写一个循环的 numpy 数学函数以在 GPU 上运行