我有一个带有'n'行和3列的多维Numpy数组。
我想先调用'm'行作为子数组并将其传递给函数,并将函数中生成的数组(没有行= m)保存在csv文件“solution.csv”中
然后第二组'm'行应该通过相同的函数,结果数组(没有行= m)应该添加到“solution.csv”。
最后,“solution.csv”将有'n'行,这些行是从函数生成的结果中连续添加所有m行而产生的。
我在python中编写适当的代码时遇到了麻烦,因为我是新手。
答案 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
),因此我可以分两步使用foo
和savetxt
:
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