Как рассчитать это уравнение в цикле Python или NumPy? - PullRequest
0 голосов
/ 14 апреля 2019

Каков наилучший способ вычислить это в цикле в 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.Массивы коэффициентов всегда одинаковы.Они не меняются.

Я приехал из Фортрана и сейчас изучаю / экспериментирую с Python, так что простите, возможно, вопрос новичка.Петли Python иногда ведут себя не интуитивно.

Ответы [ 3 ]

1 голос
/ 14 апреля 2019
  1. Исправление Vars в виде массива с нулями [Var0, Var1, .., VarN]
  2. Исправление K с использованием массива массивов [[K11, K12, .., K1N] [K21,K22, .., K2N], ...]
  3. Написать лямбда-функцию для умножения Var_row * K_row
  4. Векторизовать эту функцию, используя numpy (np.vectorize)
  5. Applyвекторизованная функция для массива данных (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)
1 голос
/ 14 апреля 2019
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() 




1 голос
/ 14 апреля 2019

Создайте массив 51 X 4 с вашими K s и массив 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...