追加Numpy数组失败

时间:2019-04-05 00:26:39

标签: python arrays numpy

我正在尝试遍历CSV文件并为文件中的每一行创建一个numpy数组,其中第一列代表x坐标,第二列代表y坐标。然后,我尝试将每个数组追加到主数组中并返回它。

import numpy as np 

thedoc = open("data.csv")
headers = thedoc.readline()


def generatingArray(thedoc):
    masterArray = np.array([])

    for numbers in thedoc: 
        editDocument = numbers.strip().split(",")
        x = editDocument[0]
        y = editDocument[1]
        createdArray = np.array((x, y))
        masterArray = np.append([createdArray])


    return masterArray


print(generatingArray(thedoc))

我希望看到一个包含所有CSV信息的数组。相反,我收到一个错误:“ append()缺少1个必需的位置参数:'values' 非常感谢您提供有关我的错误所在以及如何解决该错误的帮助!

1 个答案:

答案 0 :(得分:0)

Numpy数组不会像python列表那样神奇地增长。在向其中添加所有内容之前,需要在“ masterArray = np.array([])”函数调用中为数组分配空间。

最好的答案是使用genfromtxt(https://docs.scipy.org/doc/numpy-1.10.1/user/basics.io.genfromtxt.html)之类的东西直接导入numpy数组,但是...

如果您知道正在阅读的行数,或者可以使用类似的方法获取它。

file_length = len(open("data.csv").readlines())

然后,您可以预分配numpy数组来执行以下操作:

masterArray = np.empty((file_length, 2))

for i, numbers in enumerate(thedoc): 
    editDocument = numbers.strip().split(",")
    x = editDocument[0]
    y = editDocument[1]
    masterArray[i] = [x, y]

我推荐第一种方法,但是如果您很懒,那么您始终可以构建一个python列表,然后创建一个numpy数组。

masterArray = []

for numbers in thedoc: 
    editDocument = numbers.strip().split(",")
    x = editDocument[0]
    y = editDocument[1]
    createdArray = [x, y]
    masterArray.append(createdArray)

return np.array(masterArray)