斜对称矩阵与另一个矩阵的乘积
Product Of Skew-Symmetric Matrix And Another Matrix
我在 numpy 中有一组 n 个点(比如 p),形状为 (3,),还有一个形状为 (3,3) 的矩阵 (B)。
我需要执行 p 和 B 的斜对称形式的乘积。
我试图做 p 和 B 的叉积,因为一些在线资源建议向量(p)与另一个矩阵(B)的斜对称形式的乘积等于向量(p)与矩阵(B)的叉积.
我试过这个:
p = np.array([2, 7, 4])
B = np.arange(9).reshape([3,3])
output = np.cross(p, B)
结果:
[[ 10 -4 2]
[ 19 2 -13]
[ 28 8 -28]]
但是,当我尝试针对多个点(以下 10 个)一起执行此操作时,出现错误:
ps = np.arange(30).reshape([10,3])
B = np.arange(9).reshape([3,3])
output = np.cross(ps, B)
结果:
> Traceback (most recent call last): File "example.py", line 9, in
> <module>
> output = np.cross(ps, B) File "<__array_function__ internals>", line 6, in cross File
> "/usr/local/lib/python3.7/dist-packages/numpy/core/numeric.py", line
> 1583, in cross
> shape = broadcast(a[..., 0], b[..., 0]).shape ValueError: shape mismatch: objects cannot be broadcast to a single shape
你们能指出我做错了什么吗?谢谢!
使用 (10,3) 和 (3,3) 数组:
In [621]: np.cross(ps,B)
Traceback (most recent call last):
File "<ipython-input-621-202aa85dbcf4>", line 1, in <module>
np.cross(ps,B)
File "<__array_function__ internals>", line 5, in cross
File "/usr/local/lib/python3.8/dist-packages/numpy/core/numeric.py", line 1616, in cross
shape = broadcast(a[..., 0], b[..., 0]).shape
ValueError: shape mismatch: objects cannot be broadcast to a single shape
将维度调整为 (10,1,3) 可以生成:
In [622]: np.cross(ps[:,None,:],B).shape
Out[622]: (10, 3, 3)
实际上,它在主要维度上做着类似 outer
的产品。 cross
部分位于尾随尺寸 3 维度上。
但您可能想要确定建议使用此方法的来源。两个向量之间的叉积是另一个垂直于它们的向量(在 3d space 中)。 [622] 是每个 ps
向量集与每个 B
向量集的叉积。我看不到此操作有意义的上下文。
根据 skew-symmetric matrix
wiki 文章工作。
如果我定义两个一维数组:
In [1]: a = np.array([1,2,3]); b = np.array([2,4,3])
他们的 cross
产品是:
In [2]: np.cross(a,b)
Out[2]: array([-6, 3, 0])
定义一个函数来生成偏斜对称矩阵:
In [3]: def mk_skew(a):
...: return np.array([[0,-a[2],a[1]],[a[2],0,-a[0]],[-a[1],a[0],0]])
...:
In [4]: A = mk_skew(a)
In [5]: A
Out[5]:
array([[ 0, -3, 2],
[ 3, 0, -1],
[-2, 1, 0]])
In [6]: B = mk_skew(b)
匹配的产品是:
In [10]: A@b
Out[10]: array([-6, 3, 0])
In [11]: a@B
Out[11]: array([-6, 3, 0])
所以我可以把'points',p
的集合想象成一个数组(n,3)。但是我不确定在这种情况下您的 B
(3,3) 矩阵应该是什么?它不是斜对称的,也不是 3 'points'.
的集合
我在 numpy 中有一组 n 个点(比如 p),形状为 (3,),还有一个形状为 (3,3) 的矩阵 (B)。 我需要执行 p 和 B 的斜对称形式的乘积。 我试图做 p 和 B 的叉积,因为一些在线资源建议向量(p)与另一个矩阵(B)的斜对称形式的乘积等于向量(p)与矩阵(B)的叉积. 我试过这个:
p = np.array([2, 7, 4])
B = np.arange(9).reshape([3,3])
output = np.cross(p, B)
结果:
[[ 10 -4 2]
[ 19 2 -13]
[ 28 8 -28]]
但是,当我尝试针对多个点(以下 10 个)一起执行此操作时,出现错误:
ps = np.arange(30).reshape([10,3])
B = np.arange(9).reshape([3,3])
output = np.cross(ps, B)
结果:
> Traceback (most recent call last): File "example.py", line 9, in
> <module>
> output = np.cross(ps, B) File "<__array_function__ internals>", line 6, in cross File
> "/usr/local/lib/python3.7/dist-packages/numpy/core/numeric.py", line
> 1583, in cross
> shape = broadcast(a[..., 0], b[..., 0]).shape ValueError: shape mismatch: objects cannot be broadcast to a single shape
你们能指出我做错了什么吗?谢谢!
使用 (10,3) 和 (3,3) 数组:
In [621]: np.cross(ps,B)
Traceback (most recent call last):
File "<ipython-input-621-202aa85dbcf4>", line 1, in <module>
np.cross(ps,B)
File "<__array_function__ internals>", line 5, in cross
File "/usr/local/lib/python3.8/dist-packages/numpy/core/numeric.py", line 1616, in cross
shape = broadcast(a[..., 0], b[..., 0]).shape
ValueError: shape mismatch: objects cannot be broadcast to a single shape
将维度调整为 (10,1,3) 可以生成:
In [622]: np.cross(ps[:,None,:],B).shape
Out[622]: (10, 3, 3)
实际上,它在主要维度上做着类似 outer
的产品。 cross
部分位于尾随尺寸 3 维度上。
但您可能想要确定建议使用此方法的来源。两个向量之间的叉积是另一个垂直于它们的向量(在 3d space 中)。 [622] 是每个 ps
向量集与每个 B
向量集的叉积。我看不到此操作有意义的上下文。
根据 skew-symmetric matrix
wiki 文章工作。
如果我定义两个一维数组:
In [1]: a = np.array([1,2,3]); b = np.array([2,4,3])
他们的 cross
产品是:
In [2]: np.cross(a,b)
Out[2]: array([-6, 3, 0])
定义一个函数来生成偏斜对称矩阵:
In [3]: def mk_skew(a):
...: return np.array([[0,-a[2],a[1]],[a[2],0,-a[0]],[-a[1],a[0],0]])
...:
In [4]: A = mk_skew(a)
In [5]: A
Out[5]:
array([[ 0, -3, 2],
[ 3, 0, -1],
[-2, 1, 0]])
In [6]: B = mk_skew(b)
匹配的产品是:
In [10]: A@b
Out[10]: array([-6, 3, 0])
In [11]: a@B
Out[11]: array([-6, 3, 0])
所以我可以把'points',p
的集合想象成一个数组(n,3)。但是我不确定在这种情况下您的 B
(3,3) 矩阵应该是什么?它不是斜对称的,也不是 3 'points'.