我正在尝试使用以下格式在文件中编写矩阵(<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
...
如何进行?
答案 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()