我有一个代码,在每次迭代中生成一维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')
此代码出错。知道如何纠正它吗?
答案 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])
正如您所看到的,它可以用于一次连接各种列表,数组和单个元素。