use*_*224 24 python arrays element numpy
为什么我收到此错误消息?ValueError:使用序列设置数组元素.谢谢
Z=np.array([1.0,1.0,1.0,1.0])
def func(TempLake,Z):
A=TempLake
B=Z
return A*B
Nlayers=Z.size
N=3
TempLake=np.zeros((N+1,Nlayers))
kOUT=np.zeros(N+1)
for i in xrange(N):
kOUT[i]=func(TempLake[i],Z)
Run Code Online (Sandbox Code Playgroud)
DSM*_*DSM 41
您收到错误消息
ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)
因为您正在尝试使用序列设置数组元素.我不是想要变得可爱,那里 - 错误信息试图告诉你究竟是什么问题.不要认为它是一个神秘的错误,它只是一个短语.什么线路给出了这个问题?
kOUT[i]=func(TempLake[i],Z)
Run Code Online (Sandbox Code Playgroud)
此行尝试将ith元素设置kOUT为任何func(TempLAke[i], Z)返回值.看i=0案例:
In [39]: kOUT[0]
Out[39]: 0.0
In [40]: func(TempLake[0], Z)
Out[40]: array([ 0., 0., 0., 0.])
Run Code Online (Sandbox Code Playgroud)
您正在尝试加载一个kOUT[0]只有浮点数的4元素数组.因此,您尝试kOUT[i]使用序列(右侧)设置数组元素(左侧func(TempLake[i], Z)).
可能func没有做你想要的,但我不确定你真正想要它做什么(并且不要忘记你通常可以使用像A*B这样的矢量化操作而不是在numpy中循环.)这应该解释问题,无论如何.
小智 22
遗憾的是,这两个答案都找出了问题,但没有得出结论来解决这个问题.我们来看看代码.
Z = np.array([1.0, 1.0, 1.0, 1.0])
def func(TempLake, Z):
A = TempLake
B = Z
return A * B
Nlayers = Z.size
N = 3
TempLake = np.zeros((N+1, Nlayers))
kOUT = np.zeros(N + 1)
for i in xrange(N):
# store the i-th result of
# function "func" in i-th item in kOUT
kOUT[i] = func(TempLake[i], Z)
Run Code Online (Sandbox Code Playgroud)
错误显示您将kOUT(dtype:int)的第i项设置为数组,kOUT中的每个项只是一个int项,不能指向其他数据类型,您应该更改语句以更改kOUT的数据类型.例如,像:
更改以下声明:
kOUT = np.zeros(N + 1)
Run Code Online (Sandbox Code Playgroud)
成:
kOUT = np.zeros(N + 1, dtype=object)
Run Code Online (Sandbox Code Playgroud)
要么:
kOUT = np.zeros((N + 1, N + 1))
Run Code Online (Sandbox Code Playgroud)
所有代码:
import numpy as np
Z = np.array([1.0, 1.0, 1.0, 1.0])
def func(TempLake, Z):
A = TempLake
B = Z
return A * B
Nlayers = Z.size
N = 3
TempLake = np.zeros((N + 1, Nlayers))
kOUT = np.zeros(N + 1, dtype=object)
for i in xrange(N):
kOUT[i] = func(TempLake[i], Z)
Run Code Online (Sandbox Code Playgroud)
希望它可以帮到你.
小智 5
我相信 python 数组只是承认值。所以将其转换为列表:
kOUT = np.zeros(N+1)
kOUT = kOUT.tolist()
Run Code Online (Sandbox Code Playgroud)