Pin*_*ngk 9 python csv arrays numpy typeerror
我有一个numpy数组,其中包含以下形式的数值数据:
example = numpy.array([[[i for i in range(0, 5)],[0 for j in range(0, 5)]] for k in range(0, 10)])
Run Code Online (Sandbox Code Playgroud)
因此它是10个组的数组,其中每个组由2个相等长度的列表组成,仅包含数字.运行以下保存代码会给出以下错误:
numpy.savetxt('exampleData.csv', test, delimiter=',')
TypeError: Mismatch between array dtype ('int32') and format specifier ('%.18e %.18e')
Run Code Online (Sandbox Code Playgroud)
我猜这可以通过fmt ='xyz'参数中的某些内容修复,但文档并不是特别清楚.任何帮助,将不胜感激.
(在我的实际数据中,i和j列表是长浮点数列表,例如'0047322940571'等)
你example是一个3d阵列
In [82]: example=np.array([[[i for i in range(0, 5)],[0 for j in range(0, 5)]] for k in range(0, 3)]) # chg 10 to 3 for display
In [83]: example.shape
Out[83]: (3L, 2L, 5L)
In [84]: example
Out[84]:
array([[[0, 1, 2, 3, 4],
[0, 0, 0, 0, 0]],
[[0, 1, 2, 3, 4],
[0, 0, 0, 0, 0]],
[[0, 1, 2, 3, 4],
[0, 0, 0, 0, 0]]])
Run Code Online (Sandbox Code Playgroud)
试图保存整个事情导致错误(由于不同的版本不同的消息):
In [87]: np.savetxt('test.csv',example, delimiter=',')
....
TypeError: float argument required, not numpy.ndarray
Run Code Online (Sandbox Code Playgroud)
但保存一个'行'是可以的
In [88]: np.savetxt('test.csv',example[1,...], delimiter=',')
Run Code Online (Sandbox Code Playgroud)
使用整数格式保存可以产生更漂亮的输出
In [94]: np.savetxt('test.csv',example[1,...], delimiter=',',fmt='%d')
In [95]: with open('test.csv') as f:print f.read()
0,1,2,3,4
0,0,0,0,0
Run Code Online (Sandbox Code Playgroud)
那么你想如何保存3d数组呢?请记住您将如何使用/阅读它.多个文件?一个文件中有多个块?
/sf/answers/257973761/
是关于如何保存3d阵列的6年前的答案.简单的答案是打开一个文件,并savetxt为数组的切片执行多个.这将数据保存在块中.但加载这些块是另一个问题(之前出现过).
In [100]: with open('test.csv','w') as f:
...: for row in example:
...: np.savetxt(f,row,delimiter=',',fmt='%d',footer='====')
...:
In [101]: with open('test.csv') as f:print f.read()
0,1,2,3,4
0,0,0,0,0
# ====
0,1,2,3,4
0,0,0,0,0
# ====
0,1,2,3,4
0,0,0,0,0
# ====
Run Code Online (Sandbox Code Playgroud)
回应您的评论,这是有效的
example=np.ones((4,2,100))
np.savetxt('test.csv',example[1,...], delimiter=',',fmt='%.18e')
Run Code Online (Sandbox Code Playgroud)
另一种保存3d数组的方法是将其重新整形为2d.您在加载后将其重新整形为3d,可能使用存储在注释行中的信息
np.savetxt('test.csv',example.reshape(-1,example.shape[-1]), delimiter=',',fmt='%.18e')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19235 次 |
| 最近记录: |