首页 > 解决方案 > 为什么循环中追加的数组长度大于迭代次数?

问题描述

我运行了这段代码,并期望数组大小为 10000,就像time一个长度为 10000 的 numpy 数组一样。

freq=np.empty([])
for i,t in enumerate(time):
    freq=np.append(freq,np.sin(t))
print(time.shape)
print(freq.shape)

但这是我得到的输出

(10000,)
(10001,)

有人可以解释为什么我会得到这种差异吗?

标签: pythonnumpyfor-loopappend

解决方案


事实证明,该函数np.empty()返回给定形状的未初始化数组。因此,当你这样做时np.empty([]),它会返回一个未初始化的数组作为array(0.14112001)。这就像有一个“准备好使用”的值,但没有实际值。freq您可以通过在循环开始之前打印变量来检查这一点。

因此,当您遍历freq = np.append(freq,np.sin(t))this 时,实际上会初始化数组并向其附加第二个值。

此外,如果您只需要创建一个空数组,只需执行x = np.array([])or x = []

您可以在此处阅读有关此 numpy.empty 函数的更多信息:

https://numpy.org/doc/1.18/reference/generated/numpy.empty.html

还有更多关于这里初始化数组的信息:

https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/language_ref/aryin.html

我不确定我是否足够清楚。这不是一个直截了当的概念。所以请告诉我。


推荐阅读