gpt4 book ai didi

python - 列表中的 sympy 点积结果

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:17 28 4
gpt4 key购买 nike

我有两个 sympy 矩阵,UB:

>> 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]])

对它们应用点积会得到一个列表,而不是一个 4x4 矩阵:

>> U.dot(B)
<< [0.5*sqrt(2),
0,
0,
0.5*sqrt(2),
0.5*sqrt(2)*I,
0,
0,
-0.5*sqrt(2)*I,
0,
0.5*sqrt(2)*I,
0.5*sqrt(2)*I,
0,
0,
0.5*sqrt(2),
-0.5*sqrt(2),
0]

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

>> numpy.dot(sympy.matrix2numpy(U),sympy.matrix2numpy(B))
<< array([[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]], dtype=object)

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

最佳答案

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

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

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

关于python - 列表中的 sympy 点积结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47839177/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com