为什么我收到此错误消息? 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)
6 回答
您收到错误消息
因为您正在尝试使用序列设置数组元素 . 我不是想要变得可爱,那里 - 错误信息试图告诉你究竟是什么问题 . 不要认为它是一个神秘的错误,它只是一个短语 . 什么线路给出了这个问题?
此行尝试将
kOUT
的ith
元素设置为func(TempLAke[i], Z)
返回的任何内容 . 看看i=0
案例:您正在尝试将一个4元素数组加载到
kOUT[0]
中,该数组只有一个浮点数 . 因此,您尝试使用序列(右侧,func(TempLake[i], Z)
)设置数组元素(左侧,kOUT[i]
) .可能
func
isn 't doing what you want, but I'我不确定你真正想要它做什么(并且不要忘记你通常可以使用像A * B这样的矢量化操作而不是在numpy中循环 . )无论如何,这应该可以解释这个问题 .遗憾的是,这两个答案都找出了问题,但没有得出结论来解决这个问题 . 我们来看看代码 .
错误显示您将kOUT(dtype:int)的第i项设置为数组,kOUT中的每个项只是一个int项,不能指向其他数据类型,您应该更改语句以更改kOUT的数据类型 . 例如,像:
更改以下声明:
成:
要么:
所有代码:
希望它可以帮到你 .
我相信python数组只是承认值 . 所以将其转换为列表:
这也适用,而不是循环,只是矢量化,但请阅读scipy文档中的以下注释:https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html
提供矢量化功能主要是为了方便,而不是为了提高性能 . 实现基本上是for循环 .
如果未指定otypes,则将使用具有第一个参数的函数调用来确定输出的数量 . 如果缓存为True,则将缓存此调用的结果,以防止调用该函数两次 . 但是,要实现缓存,必须包装原始函数,这将减慢后续调用,因此只有在功能昂贵的情况下才能执行此操作 .
要将序列或另一个numpy数组放入numpy数组,只需更改以下行:
至:
要么:
KOUT [i]是列表的单个元素 . 但是您要为此元素分配一个列表 . 你的func正在生成一个列表 .