ValueError: setting an array element with a sequence- python-3.x
ValueError: setting an array element with a sequence- python-3.x
我正在使用 python-3.x,我正在尝试 运行 这个鳕鱼,但我收到了这个错误:
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.
感谢问题是关于 float dtype 的,我无法解决它,请提出任何建议或建议。
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()
something = map(schwefel, zip(X.flat,Y.flat))
print(type(something))
something = list(something)
print(type(something), len(something))
print(something[:4])
Z = np.array(something)
print(Z.dtype, Z.shape)
产生
1010:~/mypy$ python3 stack43822778.py
<class 'map'>
<class 'list'> 10000
[(476.78745748208433,), (586.67470048215569,), (696.81033496376426,), (801.49930810497494,)]
float64 (10000, 1)
映射生成一个元组列表。 np.array
可以处理。 np.fromiter
不能。
def foo(X,Y):
N = 2
temp = X * np.sin(np.sqrt(np.abs(X))) + Y * np.sin(np.sqrt(np.abs(Y)))
return 418.9828872724339*N - temp
并添加
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)
something[:4]
打印为:
[476.78745748208433, 586.67470048215569, 696.81033496376426, 801.49930810497494]
带有尾随逗号,schwefel
returns 一个 1 元素元组,而不是标量。
正在测试 np.fromiter
的使用
列出 10000 个浮点数,并将 np.array
与 np.fromiter
进行比较
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
基本上是同一时间
我正在使用 python-3.x,我正在尝试 运行 这个鳕鱼,但我收到了这个错误:
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.
感谢问题是关于 float dtype 的,我无法解决它,请提出任何建议或建议。
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()
something = map(schwefel, zip(X.flat,Y.flat))
print(type(something))
something = list(something)
print(type(something), len(something))
print(something[:4])
Z = np.array(something)
print(Z.dtype, Z.shape)
产生
1010:~/mypy$ python3 stack43822778.py
<class 'map'>
<class 'list'> 10000
[(476.78745748208433,), (586.67470048215569,), (696.81033496376426,), (801.49930810497494,)]
float64 (10000, 1)
映射生成一个元组列表。 np.array
可以处理。 np.fromiter
不能。
def foo(X,Y):
N = 2
temp = X * np.sin(np.sqrt(np.abs(X))) + Y * np.sin(np.sqrt(np.abs(Y)))
return 418.9828872724339*N - temp
并添加
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)
something[:4]
打印为:
[476.78745748208433, 586.67470048215569, 696.81033496376426, 801.49930810497494]
带有尾随逗号,schwefel
returns 一个 1 元素元组,而不是标量。
正在测试 np.fromiter
列出 10000 个浮点数,并将 np.array
与 np.fromiter
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
基本上是同一时间