python - 为什么循环中追加的数组长度大于迭代次数?
问题描述
我运行了这段代码,并期望数组大小为 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,)
有人可以解释为什么我会得到这种差异吗?
解决方案
事实证明,该函数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
还有更多关于这里初始化数组的信息:
我不确定我是否足够清楚。这不是一个直截了当的概念。所以请告诉我。
推荐阅读
- node.js - clearInterval 在 nodejs 中不起作用
- cassandra - 当 Cassandra 3.0 中的 TWCS TTL 更改时触发压缩
- html - CSS:绝对定位元素导致滚动
- python - 来自另一个文件夹的烧瓶渲染模板
- sql-server - 带空值的 case 语句
- fortran - Fortran 精度默认值,带/不带编译器标志
- mongodb-query - 为不匹配的元素创建 Mango 查询选择器
- sql - 循环层次关系查询Oracle
- rest - 无法在 Rest API 上发布 Hyperledger 交易
- regex - 从 URL 列表中选择文件路径的正则表达式