python - 绘制波函数:TypeError:只有大小为 1 的数组可以转换为 Python 标量
问题描述
我想计算电子的波函数。因此,我编写了以下代码:
import cmath
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(- np.pi, np.pi, 100, endpoint=True)
t = 0
def Wavefunction(x,t):
return np.abs(cmath.exp(-1j*t)*cmath.cos(x)+cmath.exp(1j*t)*cmath.sin(x))**2
Amplitude = np.vectorize(Wavefunction(x,t))
plt.plot(x, Wahrscheinlichkeit(x,t))
plt.show
启动程序时显示以下错误TypeError: Only Size-1 Arrays Can be Converted to Python Scalars。我已经看到 np.vectorize()应该可以解决问题,但对我来说,它没有用。
谢谢您的帮助。PS:请不要害怕这个奇怪的波函数
解决方案
你很接近:np.vectorize
将函数作为参数。因此正确的代码是:
import cmath
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(- np.pi, np.pi, 100, endpoint=True)
t = 0
def Wavefunction(x,t):
return np.abs(cmath.exp(-1j*t)*cmath.cos(x)+cmath.exp(1j*t)*cmath.sin(x))**2
Amplitude = np.vectorize(Wavefunction)
plt.plot(x, Wahrscheinlichkeit(x,t))
plt.show()
很多时候,np.vectorize
等效地用作装饰器:
import cmath
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(- np.pi, np.pi, 100, endpoint=True)
t = 0
@np.vectorize
def Wavefunction(x,t):
return np.abs(cmath.exp(-1j*t)*cmath.cos(x)+cmath.exp(1j*t)*cmath.sin(x))**2
plt.plot(x, Wahrscheinlichkeit(x,t))
plt.show()
由于您试图调用Wavefunction(x,t)
,它会在将其传递给np.vectorize
. 这就是为什么你得到同样的错误。
推荐阅读
- google-cloud-platform - 创建区域 TCP 负载均衡器时出现问题
- android - 滚动视图在第二次打开其片段后工作
- javascript - Vue.js 方法中的 Axios 请求在从“mounted()”启动时有效,但从 html 启动时无效
- azure - 您将如何使用 Azure 管道为每个项目设置默认 dockerfile 来处理它们?
- visual-studio-code - 在 VSCode 远程使用多个 Docker 文件
- php - 如何从 JSON 中提取数据并使用 PHP 将其插入 MySQL?
- android-studio - 如何更改字典?
- python - 在 for 循环中调用的函数内打印矩阵
- javascript - 脚本在外部脚本之前加载,即使放在最后
- apache-camel - 运行骆驼直接路由,直到在数据库中处理数据