【发布时间】:2018-01-16 16:28:54
【问题描述】:
我正在使用一个 12x12 的 numpy 矩阵,并且我得到“形状太大而不能成为矩阵”。我最好的猜测是 numpy “kron” 函数正在制造麻烦。
这是我的代码:
a = np.matrix("0 1 0; 0 0 1; 0 0 0 ")
a_dag = np.matrix("0 0 0; 1 0 0 ; 0 1 0")
Sp = np.matrix("0 1; 0 0")
Sm = np.matrix("0 0; 1 0")
...
119 H_I1 = (np.exp(1j*(phi-omega*t))*kron(np.eye(3),Sp,np.eye(2))
120 +np.exp(-1j*(phi-omega*t))*kron(np.eye(3),Sm,np.eye(2)))
121 H_I2 = kron(a,Sp,np.eye(2)) + kron(a_dag,Sm,np.eye(2))
这是错误:
Traceback (most recent call last):
File "/home/fyodr/qc_final.py", line 121, in <module>
H_I2 = kron(a,Sp,np.eye(2)) + kron(a_dag,Sm,np.eye(2))
File "/home/fyodr/qc_final.py", line 70, in kron
return np.kron(m[0],kron(m[1:]))
File "/usr/lib/python2.7/dist-packages/numpy/lib/shape_base.py", line 754, in kron
result = wrapper(result)
File "/usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.py", line 303, in __array_finalize__
raise ValueError("shape too large to be a matrix.")
ValueError: shape too large to be a matrix.
谢谢!
编辑:我将 kron 定义为
def kron(*m):
if len(m) == 1:
return m
else :
return np.kron(m[0],kron(m[1:]))
如果 np.kron 计算的是常规 kronecker 积,那么这应该不是问题。
【问题讨论】:
-
这是什么
kron?你给它 3 个参数,而np.kron需要 2 个。给出一个最小的工作(至少对于错误)示例。如果可行,请跳过H_I1行。并分别评估H_I2的 2 个部分,以便我们知道 - 而您 - 知道导致问题的原因。 -
我猜
kron确实创建了一个更高维的数组,实际上是 4d。您需要在其他代码中使用之前对其进行调试。