通过函数传递多维Numpy数组并将结果保存为CSV文件

时间:2015-12-20 07:18:15

标签: python arrays csv numpy

我有一个带有'n'行和3列的多维Numpy数组。

我想先调用'm'行作为子数组并将其传递给函数,并将函数中生成的数组(没有行= m)保存在csv文件“solution.csv”中

然后第二组'm'行应该通过相同的函数,结果数组(没有行= m)应该添加到“solution.csv”。

最后,“solution.csv”将有'n'行,这些行是从函数生成的结果中连续添加所有m行而产生的。

我在python中编写适当的代码时遇到了麻烦,因为我是新手。

1 个答案:

答案 0 :(得分:2)

执行此操作的示例:

数组:

In [19]: A=np.arange(30).reshape(10,3)

功能:

In [20]: def foo(Asub, x):
    return Asub+x

通过函数传递2个部分,重新​​加入它们(使用vstack):

In [21]: B=np.vstack([foo(A[:5,:],3),foo(A[5:,:],4)])
In [22]: B
Out[22]: 
array([[ 3,  4,  5],
       [ 6,  7,  8],
          ...
       [28, 29, 30],
       [31, 32, 33]])

并在一次通话中写下csv:

In [23]: np.savetxt('test.csv',B,fmt='%10d')
In [24]: cat test.csv
         3          4          5
         6          7          8
         9         10         11
        12         13         14
        15         16         17
        19         20         21
        22         23         24
        25         26         27
        28         29         30
        31         32         33

这是直接使用数组索引(切片),连接和csv写入。

savetxt也可以使用打开的文件调用(文档说file handle),因此我可以分两步使用foosavetxt

with open('text.csv','bw') as f:
    a1 = foo(A[:5,:],3)
    np.savetxt(f,a1,fmt='%10d')
    a2 = foo(A[5:,:],5)
    np.savetxt(f,a2,fmt='%10d')

或者我可以在追加模式下第二次重新打开文件。

我对保存3d数组的问题给出了类似的答案 - 作为多个2d块:https://stackoverflow.com/a/33705223/901925

Output list and numpy array into same file