我尝试打印时出现意外错误:
import numpy as np
a = np.array([11, 21, 31, 41, 51])
it = np.nditer(a, flags=['multi_index'], op_flags=['readwrite'])
while not it.finished:
i = it.multi_index
print("%d %d" % (i, a[i]))
it.iternext()
此代码生成错误:
TypeError: %d format: a number is required, not tuple
但是当我这么做时:
for i in xrange(5):
print("%d %d" % (i, a[i]))
然后我得到了预期的结果:
0 11
1 21
2 31
3 41
4 51
那么为什么我在之前的情况下会出现此错误?
答案 0 :(得分:4)
您应该尝试使用新的格式
print("{} {}".format(i, a[i]))
如果您真的想要索引和元素,可以使用enumerate
for i, x in enumerate(np.nditer(a)):
print("{} {}".format(i, x))
而且,顾名思义,multi_index
不是整数。
https://docs.scipy.org/doc/numpy/reference/arrays.nditer.html
答案 1 :(得分:4)
i
不是数字。
In [69]: it.multi_index
Out[69]: (0,)
改为使用i[0]
。
答案 2 :(得分:1)
您正在使用it.multi_index返回一个索引元组。
由于您的数组是1D,请将i=it.multi_index
替换为您要提取的索引。
在你的情况下,它应该是
i=it.multi_index[0]
答案 3 :(得分:1)
i
的类型为tuple
,请使用it.multi_index[0]
获取第一个元素,如下所示:
while not it.finished:
i = it.multi_index[0]
print("%d %d" % (i, a[i])) # The better is using "{} {}".format(i, a[i])
it.iternext()