首页 > 解决方案 > 有没有一种有效的方法来计算数组索引中两个 3D 向量的点积?

问题描述

我正在执行两个 3D 向量的以下点积:

import numpy as np

Nk = 8
Ns = 15
k_box = np.zeros(Nk**3)
R_box = np.zeros(Ns**3)
for k in range(Nk**3):
        Kx = int(k / (Nk*Nk))
        Ky = int(k / Nk) % Nk
        Kz = k % Nk
        for R in range(Ns**3):
            Rx = int(R / (Ns*Ns))
            Ry = int(R / Ns) % Ns
            Rz = R % Ns
            # This is the only place these variables are used!
            dot_product = Rx*Kx + Ry*Ky + Rz*Kz
            k_box[k], R_box[R] = perform_some_calculation(dot_product)

有没有办法在不首先x, y, z明确计算组件的情况下计算点积?把它变成 6 个循环会起作用,但看起来很恶心。这似乎是一种有技巧的事情。

我可能还需要将它扩展到非立方体积,所以如果有一个技巧并且它适用于一般的盒子几何体,那将是理想的。

标签: pythonalgorithmdot-product

解决方案


点积应按如下方式完成

import numpy as np

R = np.array([Rx,Ry,Rz])
K = np.array([Kx,Ky,Kz])
value = np.dot(R,K)

推荐阅读