2016-02-11 2 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

Что такое плотная_редукция? – Goodies

+0

Забыл упомянуть, что @Goodies, обновлено. – gsamaras

+0

Параметры 'delimiter' и' 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 (например, комментарии, разделитель и т. Д.), Но я не думаю, что вы можете сделать это таким образом. Многомерный массив нп может использоваться в качестве итератора небольших массивов, так что мы можем легко запустить:

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

Смежные вопросы