【问题标题】:Multiplying A Matrix By A String将矩阵乘以字符串
【发布时间】:2018-09-17 21:27:21
【问题描述】:

我正在尝试将矩阵乘以我定义如下的常量:

E1 = "E1"
E2 = "E2"
J = "J"

但是,当我尝试将它们乘以下面定义的矩阵时,我最终会遇到错误:

# Defining the sigma functions and Identity matrices:
sigx = np.array([[0,1],[1,0]])
sigy = np.array([[0,-1j],[1j,0]])
sigz = np.array([[1,0],[0,-1]])
I1 = np.array([[1,0],[0,1]])
I2 = I1

# Trying to structure a Hamiltonian
H1 = np.kron(((E1)*(sigz)),I2)
H2 = np.kron((E2*(I1)),(sigz))
H3 = J*((np.kron((sigx),(sigx)))+(np.kron((sigy),(sigy))))
print(H1)
print(H2)
print(H3)
# Overall Hamiltonian Matrix 
Hs = H1 + H2 + H3
print(Hs)

如果我没有如上所示预先定义 E1、E2 或 J,则该脚本有效,但它仅有效,因为 python 自动为它们分配了 1、2、3 的值。如何才能让 E1、E2 和 J 出现在矩阵运算输出中?

【问题讨论】:

  • Numpy 无法进行符号数学运算,这看起来就像您正在尝试做的那样。如果您尝试做一些需要符号数学的事情,您可以使用 sympy 代替。否则,如果您知道J 的值是数字,则应将变量J 设置为该值而不是字符串。
  • 这个计算到底应该完成什么(即,一旦你定义了汉密尔顿,你想用它做什么)?
  • 好的,我会尝试用 sympy 重写它。该库是否具有与 kron 之类的 numpy 相同的包?
  • 我正在尝试获取哈密顿量,从那里我可以得到特征值和特征向量
  • 您想要 E1、E2 和 J 的特定值的特征值和特征态,或者您想要根据这些变量的哈密顿特征值和特征态的符号表达式?

标签: arrays string python-3.x numpy matrix


【解决方案1】:

第一次在这里发帖。

我希望我不是在说显而易见的事情,但是 看起来你是在将整数矩阵乘以字符串。我认为您必须将常量定义为整数(或者可能是双精度数或浮点数)。您正在使用 Kronecker 乘积进行矩阵乘法,但您将整数乘以字符串,从而导致 dtype(U11) 错误。

https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

在这里您可以看到“U11”错误表示 little-Endian 11 Character Unicode String。

【讨论】:

【解决方案2】:

为了让你从这里开始,你的代码被翻译成 sympy:

import sympy as sp

I1 = I2 = sp.eye(2)

# Pauli matrices
# (there is sympy.physics.paulialgebra but I do not know how to use it)
sigx = sp.Matrix([[0, 1], [1, 0]])
sigz = sp.diag(1, -1)
sigy = sigx * sigz * sp.I

# symbolic constants
E1, E2, J = sp.symbols('E1 E2 J')

kp = sp.kronecker_product

H1 = kp(E1 * sigz, I2)
H2 = kp(E2 * I1, sigz)
H3 = J * (kp(sigx, sigx) + kp(sigy, sigy))

Hs = H1 + H2 + H3

# now we can for example compute eigen decomposition
evals, mults, evecs = zip(*Hs.eigenvects())

【讨论】:

  • 谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
相关资源
最近更新 更多