我定义了一个零的复数矩阵。我想如何生成对角元素在(-1/3)到1/3范围内的随机数。我怎样才能做到这一点。我遇到了无法将复数转换为浮点数的错误。我试图更改数据类型,但仍然收到此错误。

`H = np.reshape(np.zeros((81),dtype=complex),(9,9))
#rf = np.arange(len(rf),dtype=complex)
rf = np.random.uniform(complex(-1./3.),complex(1./3.))`

最佳答案

np.random.uniform()不适用于复数,只能用于实数(即float)。但是,只要您只需要沿主对角线的实数,就可以将float随意分配给一个复杂的矩阵,并且它们将以虚部为零的方式自动转换:

H = np.zeros((9,9), dtype=np.complex)
rf = np.random.uniform(-1/3, 1/3, 9)
np.fill_diagonal(H, rf)


如果您确实还需要虚部,则可以创建两组随机数,然后将它们加在一起(因为实数和虚数位于正交轴上,它们不会彼此“干扰”)

H = np.zeros((9,9), dtype=np.complex)
rf = np.random.uniform(-1/3, 1/3, 9) + 1j*np.random.uniform(-1/3, 1/3, 9)
np.fill_diagonal(H, rf)


顺便说一句,还要看看您如何不需要将全零矩阵创建为一维结构,然后对其进行整形。如果np.zeros()传递了tuple而不是数字,则可以接受多个尺寸。

关于python - 如何在已经具有复数数据类型的数组的对角线上生成复数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57474913/

10-12 22:18