我试图写一个代码,我做了一个函数的两个变量,E和n,其中n是0 - 5的范围内的总和,并绘制的结果,这应该是一个多步函数。
import matplotlib.pyplot as plt
import numpy as np
E = np.linspace(0, 10, 10000)
for n in range(0, 6):
h= []
h.append(1/(1 + np.exp(-2*np.pi * (E-(n-0.5)*3))))
print(h)
plt.plot(E,h)
这是我一直在使用的代码,它为h生成多个数组:
[array([0.99991931, 0.99991981, 0.99992031, ..., 1. , 1. ,
1. ])]
[array([8.06930057e-05, 8.12016207e-05, 8.17134412e-05, ...,
1.00000000e+00, 1.00000000e+00, 1.00000000e+00])]
[array([5.25548518e-13, 5.28861364e-13, 5.32195094e-13, ...,
1.00000000e+00, 1.00000000e+00, 1.00000000e+00])]
[array([3.42258854e-21, 3.44416317e-21, 3.46587379e-21, ...,
9.99999847e-01, 9.99999848e-01, 9.99999849e-01])]
[array([2.22893072e-29, 2.24298100e-29, 2.25711985e-29, ...,
4.09276641e-02, 4.11750329e-02, 4.14238322e-02])]
[array([1.45157155e-37, 1.46072167e-37, 1.46992947e-37, ...,
2.77912110e-10, 2.79663956e-10, 2.81426846e-10])]
但当我试图绘图时,我得到了以下错误:
ValueError:x和y必须具有相同的第一维度,但形状为(10000,)和(1,10000)
我不明白是什么原因造成的,任何帮助将不胜感激。
1条答案
按热度按时间x3naxklr1#
我猜你想要的是以下内容:
请注意,此矢量化计算不需要循环,因为Numpy broadcasting会自动计算出如何将
E
和n
矢量组合为2Dh
数组(如果输入维度一致(注意np.expand_dims
)一般来说,当您发现需要在Numpy中使用循环时,最好退一步考虑矢量化。原始代码的修复版本:
h
,这样它就不会在每次迭代时被定义为空列表。np.stack
和转置(.T
)将1D阵列列表合并为6x10_000 2D阵列,以绘制所有曲线。