Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nditer迭代和Python3打印格式的问题_Python_Python 3.x_Numpy - Fatal编程技术网

nditer迭代和Python3打印格式的问题

nditer迭代和Python3打印格式的问题,python,python-3.x,numpy,Python,Python 3.x,Numpy,我正在使用 for a, b in np.nditer([a_array, b_array]): print("{0:.3g},{1:.3g}".format(a, b)) 但我收到了TypeError:传递给对象的非空格式字符串。uuu format\uuuu 如果我插入整数而不是a和b: for a, b in np.nditer([a_array, b_array]): print("{0:.3g},{1:.3g}".format(2, 3)) 它起作用了 所以我想我对

我正在使用

for a, b in np.nditer([a_array, b_array]):
    print("{0:.3g},{1:.3g}".format(a, b))
但我收到了
TypeError:传递给对象的非空格式字符串。uuu format\uuuu

如果我插入整数而不是
a
b

for a, b in np.nditer([a_array, b_array]):
    print("{0:.3g},{1:.3g}".format(2, 3))
它起作用了

所以我想我对
a_数组
b_数组
中的值有问题。它们不被解释为正常数字吗

如果在
nditer()中选择只读标志,是否可以优化性能

编辑 一个例子

import numpy as np

a_array = np.array([])
b_array = np.array([])

number = float(input("Input number: "))

a_array = np.append(a_array, number)
b_array = np.append(b_array, number)

for a, b in np.nditer([a_array, b_array]):
    print("(a,W) = ({0:.3g},{1:.3g})".format(a, b))

nditer
不提供标量,它提供1个元素数组:

In [6]: for a in np.nditer(np.arange(1)):
    print(type(a))
   ...:     
<class 'numpy.ndarray'>

In [7]: a
Out[7]: array(0)
“老式”迭代器可以工作(对2个数组使用
zip

通用格式规范也起作用:
print({!s},{!r})。格式(a,a))

基本上,
g
和其他数字格式规范不能与迭代变量
nditer
一起使用,因为它们是数组,而不是标量。我猜这是
np.\uuu格式\uuu
方法的问题。它只能使用继承的
对象
版本

ps-提供一些样本数组可能会避开反对票,即使细节不重要


默认情况下,
nditer
生成
readonly
值。因此,设置标志不会更改它们(为标量)或提高效率:

In [258]: for a in np.nditer(A):a[...]=1
...
ValueError: assignment destination is read-only
指定读/写标志在以下情况下非常有用:

In [268]: A=np.array([0,1,2,3])
In [269]: B=np.empty((4,))
In [270]: for a,b in np.nditer([A,B],op_flags=[['readonly'],['readwrite']]):
    b[...] = a*2
   .....:     
In [271]: B
Out[271]: array([ 0.,  2.,  4.,  6.])

对于您的示例,“For zip”可以工作,而且速度更快。保留
nditer
,以备需要其额外功能时使用

In [274]: for a,b in zip(a_array, b_array):
   .....:     print("(a,W) = ({0:.3g},{1:.3g})".format(a, b))
(a,W) = (20,20)

如果您在
a_数组
b_数组
中显示值,这会很有帮助,特别是假设问题源于此。这些数组的确切值并不重要。即使是最简单的
np.arange(10)
也有这个问题。注意根据您的新示例添加。
In [258]: for a in np.nditer(A):a[...]=1
...
ValueError: assignment destination is read-only
In [268]: A=np.array([0,1,2,3])
In [269]: B=np.empty((4,))
In [270]: for a,b in np.nditer([A,B],op_flags=[['readonly'],['readwrite']]):
    b[...] = a*2
   .....:     
In [271]: B
Out[271]: array([ 0.,  2.,  4.,  6.])
In [274]: for a,b in zip(a_array, b_array):
   .....:     print("(a,W) = ({0:.3g},{1:.3g})".format(a, b))
(a,W) = (20,20)