将多个numpy数组保存到一个cs

2024-10-02 10:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要保存几个不同的CSV列。目前我这样做:

f = open(out_csv, 'w', newline='') 
w = csv.writer(f, delimiter=",", )
w.writerow(['id_a', 'id_b',
            'lat_a','lon_a',
            'lat_b','lon_b',
            'proj_metres'])
w.writerows(np.column_stack((
            id_labels[udist.row],
            id_labels[udist.col],
            points[udist.row],
            points[udist.col],
            udist.data)))

也许不重要,但为了完整性:

^{pr2}$

维度大约是3000万×7列(其中两列是字符串:id峎labels),因此这需要一段时间(大约8分钟)并使用大量RAM,因为我认为python在调用时会创建一个新的临时对象np.column_堆栈因此,在某个时间点,它可以保存两倍于它需要的数据。在

我希望有没有更好的方法来创建我需要的CSV?在


Tags: csvidlabelsnpnewlinecolumncolopen
3条回答

您可以使用append选项打开一个文件,然后使用^{}

import numpy as np
array1 = np.arange(12).reshape((2, 6))
array2 = np.ones(18).reshape((3, 6))
with open('outputfile.csv', 'ab') as f:
    np.savetxt(f, array1, delimiter=',')
    np.savetxt(f, array2, delimiter=',')

不一定很快,但是:

import numpy as np
arr1 = np.array([1,2,3,4])
arr2 = np.array([11,12,13,14])
arr3 = np.array([21,22,23,24])
numpy_arrays = [arr1, arr2, arr3]

with open(out_csv, "w") as f:
    for values in zip(*numpy_arrays): # or just zip(arr1, arr2, arr3)
        for value in values:
            f.write(str(value) + ",")
        f.write("\n")

这不会占用比单独数组所需内存更多的内存。在

首先,逐个保存文件,以避免内存问题。在

让我们考虑三种解决方案:

a=np.rand(10000,7)

import csv
def testfile():
    with open('test.csv','w') as f :
        w=csv.writer(f)
        w.writerows(a)

def testsavetxt():
    np.savetxt('test.csv',a)


def testpickle():
    with open('test.pickle','wb') as f:
        pickle.dump(a,f)    

一些测试:

^{pr2}$

所以savetext稍微快一点。在

如果csv不是必需的,pickle提供一个二进制协议,它的速度要快40倍。在

相关问题 更多 >

    热门问题