ValueError:使用序列设置数组元素-python-3.x

ValueError:使用序列设置数组元素-python-3.x,python-3.x,numpy,valueerror,Python 3.x,Numpy,Valueerror,我正在使用python-3.x,我正在尝试运行此cod,但收到以下错误: Z = np.fromiter(map(schwefel, zip(X.flat,Y.flat)), dtype=np.float16, count=X.shape[0]*X.shape[1]).reshape(X.shape) ValueError: setting an array element with a sequence. 我感谢这个问题是所有关于浮动数据类型,我无法解决它,请任何建议或建议将不胜感激 i

我正在使用python-3.x,我正在尝试运行此cod,但收到以下错误:

Z = np.fromiter(map(schwefel, zip(X.flat,Y.flat)), dtype=np.float16, 
count=X.shape[0]*X.shape[1]).reshape(X.shape)

ValueError: setting an array element with a sequence.
我感谢这个问题是所有关于浮动数据类型,我无法解决它,请任何建议或建议将不胜感激

import random
from math import sin, cos, pi, exp, e, sqrt
from operator import mul
from functools import reduce
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt

try:
    import numpy as np
except:
    exit()

def schwefel(individual):
    N = len(individual)

    return 418.9828872724339*N-sum(x*sin(sqrt(abs(x))) for x in individual),

fig = plt.figure()
# ax = Axes3D(fig, azim = -29, elev = 50)
ax = Axes3D(fig)
X = np.arange(-500, 500, 10)
Y = np.arange(-500, 500, 10)
X, Y = np.meshgrid(X, Y)

Z = np.fromiter(map(schwefel, zip(X.flat,Y.flat)), dtype=np.float16, count=X.shape[0]*X.shape[1]).reshape(X.shape)

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0.2)

plt.xlabel("x")
plt.ylabel("y")
plt.show()
产生

1010:~/mypy$ python3 stack43822778.py 
<class 'map'>
<class 'list'> 10000
[(476.78745748208433,), (586.67470048215569,), (696.81033496376426,), (801.49930810497494,)]
float64 (10000, 1)

Z1 = foo(X,Y)
print(Z1.dtype, Z1.shape)
print(np.allclose(Z1, Z.reshape(100,100)))   # true
foo对函数的所有X和Y值进行求值,而不进行任何迭代

如果我只是省略了一个尾随逗号,那么fromiter方法是有效的

return 418.9828872724339*N-sum(x*sin(sqrt(abs(x))) for x in individual) # ,

Z = np.fromiter(something, dtype=np.float16, count=X.shape[0]*X.shape[1]).reshape(X.shape)
print(Z.shape, Z.dtype)
某物[:4]打印为:

[476.78745748208433, 586.67470048215569, 696.81033496376426, 801.49930810497494]
schwefel使用结尾的逗号返回一个1元素元组,而不是标量

测试np.fromiter的使用

列出10000个浮点数,并将np.array与np.fromiter进行比较


基本上是相同的时间。

在Py3中,map是一种生成器,您需要将其包装在listmap中。。。获取列表。为什么不使用numpy函数执行schwefel计算?np.sin,np.abs,etcdo你的意思是在代码中添加列表:codeZ=np.fromiter listmapschwefel,zipX.flat,Y.flat@hpaulj如果是,它不起作用!!别让我们悬而未决!提供有关错误和中间值的详细信息。你不希望我把代码复制粘贴到我的计算机上,然后自己调试它,是吗?我做的是代码Z=np.fromiter listmapschwefel,zipX.flat,Y.flat,dtype=np.float,count=X.shape[0]*X.shape[1]。但我收到了这个错误代码TypeError:list最多包含1个参数3@hpaulj
return 418.9828872724339*N-sum(x*sin(sqrt(abs(x))) for x in individual) # ,

Z = np.fromiter(something, dtype=np.float16, count=X.shape[0]*X.shape[1]).reshape(X.shape)
print(Z.shape, Z.dtype)
[476.78745748208433, 586.67470048215569, 696.81033496376426, 801.49930810497494]
In [55]: arr = np.random.rand(100,100)
In [56]: alist = arr.ravel().tolist()
In [57]: len(alist)
Out[57]: 10000
In [58]: timeit np.fromiter(alist, dtype=np.float16, count=10000)
1000 loops, best of 3: 550 µs per loop
In [59]: timeit np.array(alist, np.float16)
1000 loops, best of 3: 506 µs per loop
In [60]: timeit np.array(alist)
1000 loops, best of 3: 412 µs per loop
In [61]: timeit np.array(alist, np.float64)
1000 loops, best of 3: 413 µs per loop