numpy - hasattr(np.array(1), '__iter__') 是 True 但在循环 np.array(1) 时抛出 TypeError
问题描述
在 Numpy 版本 1.21.1 上,
import numpy as np
arr = np.array(1)
hasattr(arr, '__iter__') # Returns True
for i in arr: # Throws TypeError: iteration over a 0-d array
print(i)
这种行为的原因是什么?
解决方案
这不起作用,因为数组没有任何维度可以迭代(它只是一个值)
要对其进行迭代,请创建您的数组,例如np.array([1])
>>> np.array(1).shape
()
>>> iter(np.array(1))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: iteration over a 0-d array
>>> np.array([1]).shape
(1,)
>>> iter(np.array([1]))
<iterator object at 0xabcd000>
虽然实例numpy.array
有一个__iter__
方法,但它们在内部直接检查它们是否为 0 维,并在尝试迭代时引发 TypeError !
static PyObject *
array_iter(PyArrayObject *arr)
{
if (PyArray_NDIM(arr) == 0) {
PyErr_SetString(PyExc_TypeError,
"iteration over a 0-d array");
return NULL;
}
return PySeqIter_New((PyObject *)arr);
}
推荐阅读
- metrics - 清理 Ambari Metrics 系统数据后,Ambari 指标不显示指标
- excel - 在Excel中,将数字格式化为字符串的公式?
- javascript - 在 javascript 中查找 Gapful 数字
- xml - 撒克逊引擎不会创建带有文本的文件
- laravel - laravel 项目中 vue-slick 的问题
- selenium-webdriver - 未阻止时如何解决有关阻止 webdriver.dll 的 msg 问题
- angular - 根据输入字段,我需要以角度自动选择表格中的复选框
- selenium - 如何使远程机器始终处于活动状态以执行自动化执行
- python - 在 Django 3 项目中使用 Motor 或任何其他异步 MongoDB 驱动程序
- tensorflow - 带有生成器的 tf.data api 的多个输入