【问题标题】:ValueError :Setting an array element with a sequence using numpyValueError:使用 numpy 设置具有序列的数组元素
【发布时间】:2017-10-20 11:53:52
【问题描述】:

我在python中有这段代码

data = np.empty(temp.shape)
maxlat = temp.shape[0]
maxlon = temp.shape[1]
print(maxlat,maxlon)

for i in range(0,maxlat) :
    for j in range(0,maxlon):
        data[i][j] = p_temperature(pr,temp[i][j])

当我在 Python 3.5 中运行此代码时,我收到此错误

ValueError : setting an array element with a sequence

maxlat 的值为181maxlon 的值为360

temp数组的形状是(181,360)

我也尝试了cmets中的建议:

for i in range(0,maxlat) :
    for j in range(0,maxlon):
        data[i][j] = temp[i][j]

但我得到了同样的错误。

【问题讨论】:

  • ptemperature 是做什么的?
  • 根据错误,看起来p_temperator 没有返回一个标量,而是一个numpy数组本身。
  • @WillemVanOnsem - 它只返回一个给定两个输入 p 和 temp 的数字
  • 在问题中。但是,请只是一个示例(例如 5x5 不是完整的 181x360),基本上足以让我们重现您的问题并帮助您解决它
  • @ADITYA 不,这会引发 ValueError: could not convert string to float: 异常。 :)

标签: python arrays numpy python-3.5


【解决方案1】:

根据您得到的异常,temp 似乎是一个包含序列的object 数组。你可以简单地使用numpy.empty_like:

data = np.empty_like(temp)  # instead of "data = np.empty(temp.shape)"

这将创建一个具有相同形状和 dtype 的新空数组 - 类似于您的原始数组。


例如:

import numpy as np

temp = np.empty((181, 360), dtype=object)
for i in range(maxlat) :
    for j in range(maxlon):
        temp[i][j] = [1, 2, 3]

使用新方法可以正常工作:

data = np.empty_like(temp)
maxlat = temp.shape[0]
maxlon = temp.shape[1]
print(maxlat, maxlon)

for i in range(maxlat) :
    for j in range(maxlon):
        data[i][j] = temp[i][j]

这个temp 数组也重现了您原始代码示例中的异常:

data = np.empty(temp.shape)  # your approach
maxlat = temp.shape[0]
maxlon = temp.shape[1]
print(maxlat, maxlon)

for i in range(maxlat) :
    for j in range(maxlon):
        data[i][j] = temp[i][j]

抛出异常:

ValueError: 使用序列设置数组元素。

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 2020-08-21
    • 1970-01-01
    • 2016-01-21
    • 2023-03-16
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多