2012-02-14 2 views
2

У меня есть этот код, который принимает матрицу и создает массив соседних соседей каждого элемента в матрице. Элементы являются идентификаторами, которые я буду использовать в качестве ключа для поиска значений в словаре. «Hooked» очень помог мне с написанием этого кода в формате numpy. То, что я хотел бы сделать, это экспортировать список соседей в файл csv. У меня возникают проблемы с командой writer.writerows в коде ниже. Я получаю сообщение об ошибке. Я считаю, что это связано с тем, что он хочет написать список списков, в которых мой выходной формат не содержит никаких запятых между списком соседей.Экспортировать массив numpy в текстовый файл

Выход из кода выглядит следующим образом:

[0. 0. 309. 0. 0. 10. 11. 12.]

[0. 309. 310. 0. 1. 11 . 12. 13.]

[309. 310. 311. 0. 2. 12. 13. 14.]

[310. 311. 312. 1. 3. 13. 14. 15.]

[311. 312. 313. 2. 4. 14. 15. 16.]

[312. 313. 314. 3. 5. 15. 16. 17.]

[313. 314. 315. 4. 6. 16. 17. 18.]

[314. 315. 316. 5. 7. 17. 18. 19.]

[315. 316. 317. 6. 8. 18. 19. 20.]

[316. 317. 318. 7. 9. 19. 20. 21.]

Вот код:

from numpy import * 
    import sys 
    import csv 

    k = 1 

    #Create nearest neighbors 
    Xidx, Yidx = mgrid[-k:k+1,-k:k+1] 

    #Remove the center (0,0) index 
    center = (Xidx==0) & (Yidx==0) 
    Xidx = Xidx[~center] 
    Yidx = Yidx[~center] 

    data = loadtxt("H:\SWAT\NC\GRID_FIDS2.txt") 
    #print data 

    for dx in range(11): 
     for dy in range(11): 
      FID = data[dx,dy] 
      #print FID 
      NL = data[Xidx+dx,Yidx+dy] 
      print NL 
      f = open("H:\SWAT\NC\Pro_NL.txt", 'wt') 
      try: 
       writer=csv.writer(f) 
       writer.writerows(NL) 
      finally: 
       f.close() 
    ''' 
    dx,dy = 0,4 
    print "Cell Value data[%i,%i] = %f " % (dx, dy, data[dx,dy]) 
    print "k=%i nearest neighbors: "%k, data[Xidx+dx, Yidx+dy] 
    '''  
    ' 

В идеале я хотел бы иметь для файла csv один столбец со всеми значениями FID, а второй столбец имеет список соседей (NL), соответствующий значению FID. Я ценю любой вклад в этом ... Я тестировал разные вещи весь день без успеха!

ответ

3

Alternate с помощью объекта CSV, вы можете структурировать свой код следующим образом:

f=open("out_file","w") 
... 
for dx in range(11): 
    for dy in range(11): 
     FID = data[dx,dy] 
     ..... 
     NL = data[Xidx+dx,Yidx+dy] 
     f.write(str(NL)) 
f.close() 
+0

Так просто ... тьфу! Спасибо за вашу помощь, с небольшим форматированием он отлично выглядит! – Linda

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