2016-02-11 123 views
0

我试图写在一个文件中的矩阵(<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

什么是dense_reduced? – Goodies

+0

忘记提及@Goodies,更新。 – gsamaras

+0

“分隔符”和“fmt”参数将纠正大部分行。我不确定要添加行计数器。 – hpaulj

回答

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"]) 

为:

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()

+0

我不想限制小数位,所以我只是丢弃5你有? – gsamaras

+0

哇,我纠正了。我无法弄清楚np.savetxt。奖励! – Goodies

+0

@gsamaras:好的,编辑10! –

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() 
+0

这将把所有内容放在*一行*中。那么'f.write(“{}#{} \ n”.format(i,','.join(list(map(str,a)))))'? :) – gsamaras