Существует ли эффективный способ вычисления точечного произведения двух трехмерных векторов из индекса массива?

Я использую простой скрипт при запуске jmeter с моей собственной версией java versin


setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version

, чтобы иметь «портативный» Java, вы можете использовать этот метод здесь:

https://www.whitebyte.info/programming/java/how-to-install-a-portable-jdk-in-windows-without-admin-rights

1
задан meowgoesthedog 5 March 2019 в 15:00
поделиться

2 ответа

Используйте itertools.product для получения списка точек, который эквивалентен декартову произведению диапазонов каждой координаты:

>>> list(itertools.product(range(3), range(3), range(3)))
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), 
 (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), 
 (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1), (2, 0, 2), 
 (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0), (2, 2, 1), (2, 2, 2)]

Вы также можете объединить все 6 координат в один генератор:

coords = itertools.product(range(Nk), range(Nk), range(Nk), range(Ns), range(Ns), range(Ns))
for kz, ky, kx, rz, ry, rx in coords:
    k, r = Nk * (Nk * kz + ky) + kx, Ns * (Ns * rz + ry) + rx
    dot_product = kx * rx + ky * ry + kz * rz
    k_box[k], R_box[r] = perform_some_calculation(dot_product)

В качестве альтернативы, чтобы избежать расчета индекса, используйте enumerate:

for k, (kz, ky, kx) in enumerate(itertools.product(range(Nk), range(Nk), range(Nk))):
    for r, (rz, ry, rx) in enumerate(itertools.product(range(Ns), range(Ns), range(Ns))):
        dot_product = kx * rx + ky * ry + kz * rz
        k_box[k], R_box[r] = perform_some_calculation(dot_product)
0
ответ дан meowgoesthedog 5 March 2019 в 15:00
поделиться

Точечный продукт должен быть выполнен следующим образом

import numpy as np

R = np.array([Rx,Ry,Rz])
K = np.array([Kx,Ky,Kz])
value = np.dot(R,K)
0
ответ дан Vipluv 5 March 2019 в 15:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: