sympy dot product列表

时间:2017-12-15 20:05:04

标签: python matrix sympy dot-product

我有两个同情矩阵,[RegularExpression(@"^\S*$", ErrorMessage = "No white space allowed")] tags.messages

U

将dot产品应用于它们会产生一个列表,而不是4x4矩阵:

B

相比之下,numpy看起来像做正确的事情:

>> U
<< Matrix([
   [1.0,   0,   0,   0],
   [  0, 1.0,   0,   0],
   [  0,   0, 1.0,   0],
   [  0,   0,   0, 1.0]])
>> B
<< Matrix([
   [sqrt(2)/2,  0.5*sqrt(2)*I,             0,          0],
   [        0,              0, 0.5*sqrt(2)*I,  sqrt(2)/2],
   [        0,              0, 0.5*sqrt(2)*I, -sqrt(2)/2],
   [sqrt(2)/2, -0.5*sqrt(2)*I,             0,          0]])

我做错了什么?这是预期的行为吗?

2 个答案:

答案 0 :(得分:2)

SymPy使用*运算来表示矩阵的乘法,即你想要使用:

U*B

# Matrix([
# [0.5*sqrt(2),  0.5*sqrt(2)*I,             0,            0],
# [          0,              0, 0.5*sqrt(2)*I,  0.5*sqrt(2)],
# [          0,              0, 0.5*sqrt(2)*I, -0.5*sqrt(2)],
# [0.5*sqrt(2), -0.5*sqrt(2)*I,             0,            0]])

如您所见,这些元素与您的列表相同,但具有所需的结构。

答案 1 :(得分:1)

与NumPy不同,在SymPy中,dot表示向量的点积。它的设计使你可以得到两个行或列向量的点积,而不必担心使用.T,但也许这里的松弛形状有点多,因为它是字面上取list(U)list(B)的点积。

这里可能太松懈了。我为此打开了SymPy issue。在这种情况下,SymPy引发异常更为正确。

正如@Wrzlprmft正确指出的那样,SymPy使用*来乘以矩阵(如果使用的是Python 3.5或更高版本,则使用@)。