如何在Python或NumPy循环中计算此方程式?

时间:2019-04-14 10:37:26

标签: 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循环有时对我而言是不直观的。

3 个答案:

答案 0 :(得分:1)

51 X 4组成一个K数组,并将4 X 1组成一个X数组并相乘。 Numpy有一个叫做 broadcasting 的东西,它将扩展X使其与K的每一行相乘。

import numpy as np
K = np.column_stack([k0, k1, k2, k3])
X = np.array([x0, x1, x2, x3])
result = K * X

答案 1 :(得分:1)

  1. 将Vars固定为一个numpy数组[Var0,Var1,..,VarN]
  2. 修复K是一个[[K11,K12,..,K1N] [K21,K22,..,K2N],...]的小数数组
  3. 编写一个lambda函数以乘以Var_row * K_row
  4. 使用numpy(np.vectorize)矢量化此函数
  5. 将矢量化功能应用于海量数据(2)
  6. 开心=)

草稿

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)

答案 2 :(得分:1)

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()