试图将numpy数组(通过循环生成)写入csv格式

时间:2012-08-21 16:37:41

标签: python csv numpy

我有一个代码,在每次迭代中生成一维numpy数组。我希望将数组附加到CSV文件的末尾,以便我可以从Excel读取所有数据。我目前正在尝试以下方法:

for loop in range(0,10):
    # The following part generates the array 
    Array1 = numpy.array([4.3])  
    Array2 = numpy.array([10.2])
    Array3 = numpy.concatenate((Array1,Array2),axis=0)

    # The following part tries to generate a CSV writable array. But it fails :S
    if (loop == 0):
        ArrayMain = Array3
    else:
        # Trying to append the new array with the previous array
        ArrayMain = numpy.asarray(ArrayMain,Array3)  

# Trying to write the array into a .txt. file in .csv format
numpy.savetxt("ArrayMain.csv", ArrayMain, delimiter=",",fmt='%.3f')

此代码出错。知道如何纠正它吗?

3 个答案:

答案 0 :(得分:2)

我认为您需要使用append函数将新数组附加到前一个数组,asarray函数将输入转换为数组。

    else:
        # Trying to append the new array with the previous array
        ArrayMain = numpy.append(ArrayMain,Array3)  

答案 1 :(得分:1)

你应该记住,ndarrays并非真的被设计为像那样附加。

如果您在循环之外立即编写CSV文件,则应考虑使用数组列表。

base = []
for i in range(10):
    base.append(...)
np.savetxt("ArrayMain.csv", base, ...)

如果你附加到base的数组具有相同的大小(np.savext会将数组列表转换为数组本身),那将会有效。

或者,您可以先打开要写入的文件,然后在np.savetxt中使用其句柄在每次迭代时更新它。在这种情况下,不要忘记在最后关闭它......

答案 2 :(得分:0)

Mostafar是对的。 numpy.asarray不附加列表

numpy.asarray([1,2]) -> array([1,2])

即。它实际上做的是它将列表转换为数组。 您可以使用他定义的追加功能。或者我个人最喜欢的

numpy.r _

用法:

numpy.r_[array([1,2]), array([3,4])] -> array([1,2,3,4])

also:

numpy.r_[array([1,2]), 3, [4,5], 6, array([7,8])] -> array([1, 2, 3, 4, 5, 6, 7, 8])

正如您所看到的,它可以用于一次连接各种列表,数组和单个元素。