【发布时间】:2021-04-09 19:03:29
【问题描述】:
请考虑以下python代码
import matplotlib.pyplot as plt
import numpy as np
#创建一些数据来绘制。
dt = 0.001
t = np.arange(0.0,100,dt)
r = np.exp(-t[:1000]/0.05)
x = np.random.randn(len(t))
s = np.convolve(x,r)[:len(x)]*dt
代码编译并运行,我大致了解它在做什么。但是,我对代码 '[:len(x)]' 实际上在做什么感到困惑。如果我将 's' 截断为 'np.convolve(x,r)*dt',则代码无法编译,并且来自 'base.py' 的错误消息如下:
"raise ValueError(f"x 和 y 必须具有相同的第一维,但是 " ValueError: x 和 y 必须具有相同的第一个维度,但形状为 (100000,) 和 (100999,)"
'[:len(x)]' 实际上在做什么,语言文档中是否有一些内容提供了这种上下文的一些示例?
谢谢。
所有对象都是'ndarray'类型。 t 是长度 100000 t 的形状为 (100000,)
r is length 1000
r is of shape (1000,)
x is length 100000
x is of shape (100000,)
s is length 100999
s is of shape (100999,)
【问题讨论】:
-
[:len(x)]只是说“从np.convolve调用的结果中,只取第一个len(x)元素,将它们乘以dt并将结果向量存储在s中。 -
你有完全相同的概念 2 行:
-t[:1000],它采用t的前 1,000 个元素并在计算中使用它们。这是同一件事。它叫做slice notation。 -
那么对于 'plt.plot(t,s)' ndarray 对象 't' 和 's' 必须具有相同的形状?那是100000?否则形状将分别为 100000 和 100999 ?在这种情况下,长度和形状似乎是一致的。
-
是的。在这种情况下,
t和s是绘图的 x 和 y 坐标。他们最好有相同的基数。没有y就不能有x。 -
非常感谢。现在从图形 pov 看来很明显,但代码不是:-(