gpt4 book ai didi

python - 从 csv 读取的数据出现 ValueError : setting an array element with a sequence.

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:53 46 4
gpt4 key购买 nike

我正在尝试按行从 csv 加载数据,然后从每一行中创建二维数组并将其存储在数组中:

正在加载:

with open('data_more.csv', newline='') as csvfile:
data = list(csv.reader(csvfile))

解析:

def getTrainingData():
label_data = []
for i in range( 0 , len(data) - 1):
y = list(data[i][1:41:1])
y = list(map(lambda x: list(map(lambda z: int(z),x)),y))
y = create2Darray(y)
label_data.append(y)
labelY = np.array(label_data,dtype=float)

create2Darray 函数:

def create2Darray( arr ):
final_arr = []
index = 0
while( index < len(arr)):
temp = arr[index:index+4:1]
final_arr.append(temp)
index+=4
return final_arr

这是一个简单的任务,但我一直收到错误:

ValueError: setting an array element with a sequence.

我读到它与元素形状不相同的情况有关。但是,当我在 labelY 中打印所有元素的形状时,它会输出相同的形状。

那么是什么导致了这个问题呢?问题出现在这一行

labelY = np.array(label_data,dtype=float)

我的 csv 有格式

number, number, number

行中基本上有 N 个数字,用“,”分隔 example感谢您的帮助。

最佳答案

让我们从头开始:

  1. 您似乎想要遍历文件的每一行以创建一个数组。迭代应该超过range(0, len(data)),而不是range(0, len(data) - 1):范围的最后一个元素是< em>exclusive,因此您目前正在跳过最后一行。事实上,你可以简单地写 range(len(data)),或者更 Pythonic 的,做

    for y in data:
    y = y[1:41]
  2. 根据后面的内容,您希望 y 的 40 个元素从第二个元素开始。在这种情况下,y[1:41] 是正确的(您不需要结尾的 :1)。如果您不想跳过第一个元素,请使用 y[0:40],或更符合 Python 的 y[:40]。请记住,索引是从零开始的,停止索引是独有的

  3. y 列表中的每个元素不是一个数字。它是一个字符串,您从文件中读取它。通常,您可以使用

    将其转换为数字列表
    y = [float(x) for x in y]

    y = list(map(float, y))

    您的代码改为为每个元素创建一个嵌套列表,将其按数字拆分。这真的是你想要的吗?从问题的其余部分看来肯定不是这样。

  4. create2Darray 似乎需要一个 4n 数字的列表,并将其分解为一个 n-by-4 大小的二维列表>。如果此时你想继续使用纯 Python,你可以使用 range 来缩短代码:

    def create2Darray(arr):
    return [arr[i:i + 4] for i in range(0, len(arr), 4)]
  5. 使用 label_data.append(y) 将 2D 操作的结果附加到 3D 列表。目前,由于数字拆分,label_data 是一个第 4 维不规则的 4D 列表。以这种方式附加列表是非常低效的。如果有一个包含 for 循环主体中语句的小函数,并在列表理解中使用它,您会做得更好。
  6. 最后,将 4 维数组(可能应该是 3 维数组)转换为 numpy 数组。此操作失败,因为您的号码的位数不尽相同。修复第 3 步后,错误就会消失。当您将所有内容显式转换为 int 时,仍然存在为什么需要 dtype=np.float 的问题,但这需要您自己弄清楚。
  7. 不要忘记将返回值添加到 getTrainingData!

长话短说

不过,您真正可以做的最简单的事情是在将文件转换为 2D numpy 数组后进行所有转换。您的程序可以重写为

with open('data_more.csv', newline='') as file:
reader = csv.reader(file)
data = [float(x) for x in line[1:] for line in reader]
data = np.array(data).reshape(data.shape[0], -1, 4)

关于python - 从 csv 读取的数据出现 ValueError : setting an array element with a sequence.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635871/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com