将数据写入文件

时间:2016-02-11 22:13:07

标签: python scala python-2.7 numpy matrix

我正在尝试使用以下格式在文件中编写矩阵(<type 'numpy.ndarray'>):

  

index_of_row#v0,v1,v2

将由我的合作伙伴的Scala代码阅读(如果重要的话)。

阅读this后,我最终得到了这段代码:

print dense_reduced
# this will give an error:
#TypeError: expected a single-segment buffer object
#f = open('dense.txt','w')
#f.write(dense_reduced[0])
#f.close()
numpy.savetxt('dense.txt', dense_reduced, delimiter=", ", fmt="%s") 

输出:

[[-0.17033304  0.13854157  0.22427917]
..
 [-0.15361054  0.38628932  0.05236084]]

和dense.txt是:

-0.170333043895, 0.138541569519, 0.224279174382
...

然而,有几个的原因我需要使用dense.txt看起来像这样(矩阵的行的索引#值用逗号分隔):

0 # -0.17033304,  0.13854157,  0.22427917
...

如何进行?

2 个答案:

答案 0 :(得分:2)

使用savetext()选项:

u = dense_reduced
w = np.hstack((np.arange(u.shape[0]).reshape(-1,1),u))
np.savetxt('dense.txt', w, fmt=["%i #"]+ ["%.10s, "]*(u.shape[1]-1)+["%.10s"])

for:

0 # 0.57105063,  0.70274226,  0.87870916
1 # 0.28735507,  0.94860021,  0.63763897 
2 # 0.26302099,  0.26609319,  0.75001683 
3 # 0.93315750,  0.19700358,  0.13632004

如果您有熊猫,也可以使用w=pd.DataFrame(u).reset_index()进行简化。

答案 1 :(得分:1)

你可以在numpy.savetxt中提供几个选项(例如注释,分隔符等),但我不相信你可以这样做。多维np数组可以用作较小数组的可迭代数,因此我们可以轻松运行:

my_array = np.array(range(20)).reshape((4,5))
f = open("output.txt", "w")
for i, a in enumerate(my_array):
    f.write("{} # {}".format(i, ', '.join(list(map(str, a)))))
f.close()