【问题标题】:Passing Multidimensional Numpy arrays through a function and saving results in a CSV file通过函数传递多维 Numpy 数组并将结果保存在 CSV 文件中
【发布时间】:2016-03-26 12:42:10
【问题描述】:

我有一个多维 Numpy 数组,包含“n”行和 3 列。

我想将前 'm' 行作为子数组调用并将其传递给函数,然后函数的结果数组(行数 = m)将保存在 csv 文件“solution.csv”中.

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

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

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

【问题讨论】:

    标签: python arrays csv numpy


    【解决方案1】:

    执行此操作的示例:

    数组:

    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

    【讨论】:

    • 谢谢。使用循环(在 [21] 中:)调用子数组来传递函数怎么样?我认为这样会更好。
    • 如果您需要处理更多切片,当然循环会很自然。
    猜你喜欢
    • 2021-12-16
    • 2013-08-23
    • 2021-03-06
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多