Это моя цель, используя Python Numpy:Python, создавая большую одномерную матрицу 3-мерных продуктов точечных
Я хотел бы создать (1000,1000) одномерный массив/матрицу точечных значений продукции. Это означает, что каждый элемент массива/матрица является скалярное произведение векторов 1 до 1000. Построение теоретически это просто: один определяет (1,1000) мерную матрицу векторов v1, v2, ..., V1000
import numpy as np
vectorvalue = np.matrix([v1, v2, v3, ..., v1000])
и принимает скалярное произведение с транспонированной, т.е.
matrix_of_dotproducts = np.tensordot(vectorvalue.T, vectorvalue)
и форма массива/матрица будет (1000, 1000). Запись (1,1) будет точечным произведением векторов (v1, v1), запись (1,2) будет точечным произведением векторов (v1, v2) и т. Д. Для вычисления точечного произведения с numpy для трехмерного вектора, целесообразно использовать numpy.tensordot()
вместо numpy.dot()
Вот моя проблема: я не начинаю с массива векторных значений. Я начинаю с трех 1000 массивов элементов каждого значения координат, т. Е. Массива x-координат, y-координат и z-координат.
xvalues = np.array([x1, x2, x3, ..., x1000])
yvalues = np.array([y1, y2, y3, ..., y1000])
zvalues = np.array([z1, z2, z3, ..., z1000])
проще всего сделать, чтобы построить (3, 1000) Numpy массив/матрицы, а затем взять скалярное произведение тензорное для каждой пары?
v1 = np.array([x1,y1,z1])
v2 = np.array([x2,y2,z2])
...
Я уверен, что есть более сговорчивый и эффективный способ сделать это ...
PS: Для того, чтобы были ясны, я хотел бы взять 3D скалярного произведения. То есть, для векторов
А = (а1, а2, а3) и В = (b1, b2, b3),
скалярное произведение должно быть
DotProduct (А, В) = a1b1 + a2b2 + a3b3.
или слегка более компактно: 'обр = np.array ([xvalues, zvalues,, Y.]); out = arr.T.dot (arr) ' – hpaulj