【发布时间】:2018-06-26 10:12:37
【问题描述】:
如何执行向量和矩阵乘法 其中 v 是一个向量 (v1, v2, v3) 而 A 是一个 3x3 矩阵? Python 抱怨形状不对齐,可能是因为 v 是一个 ndarray。关于如何进行此操作的任何想法?最终结果应该是每个坐标点 (v1, v2, v3) 的标量。下面的基本代码在尝试进行乘法运算时会中断。
import numpy as np
a = np.linspace(0, 10, 21)
b = np.linspace(0, 20, 41)
a, b = np.meshgrid(a,b)
v = np.array([a*b, a+b, a])
A = np.ones([3,3])
s = v.T @ A @ v # doesn't work
错误
----> 1 s = v.T @ A @ v
ValueError: shapes (21,41,3) and (3,41,21) not aligned: 3 (dim 2) != 41 (dim 1)
编辑:矩阵运算应该在每个点v完成,其中v通常是一个大数组(向量)。例如取一个 1m 的立方体,其中心位于原点,并在每个网格点计算矩阵运算,例如在每个坐标轴上每隔 10cm。
编辑 2 在 (x,y,z) 处的单个点的示例
A = np.zeros([3,3])
A[0][0] = 1
A[1][1] = 2
A[2][2] = 3
x,y,z = 1, 1, 0
v = np.array([x, y, z])
s = v.T @ A @ v # should give s=3
下一步是使代码适用于大量向量v。除了它有点复杂,因为矢量坐标 (x,y,z) 需要根据坐标 (a,b) 进行参数化。上面的原始代码试图做到这一点,但不起作用,可能不是最好的方法。还有其他想法吗?
【问题讨论】:
-
输出数组的预期形状是什么?
-
@Divakar 最终我想要的是每个坐标点的标量值,因此需要任何形状才能到达那里。目前的代码更多是起点,可以改编。
-
您能列出最小样本和预期输出吗?
标签: python arrays numpy matrix linear-algebra