Чтение текстового файла в структурированный 2D-массив numpy

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

У меня есть структурированный 2D массив numpy формы: [2,2]

заполненный пример [2,2] массива:

Main_Clt_data_array :

 [ [ ((10, 10), 20, 300.) ((20, 20), 20, 300.) ]
  [((30, 30), 30, 300.) ((40, 40), 40, 300.)] ] 
  

Он имеет следующий тип данных

 Cord_dtype = np.dtype([('X', np.float64), ('Y', np.float64)])
Clt_data_dtype=np.dtype([('Coord', Cord_dtype),('Angle', np.float64), ('Length', np.float64)])
  

Используя np.savetxt , я смог сохранить массив в текстовый файл, сохраняя ту же форму и порядок.

‘Trial.txt ‘ :
введите описание изображения здесь


но когда я пытаюсь читать в python с помощью genfromtxt, это не работает.: пример:

 read_array = np.genfromtxt('Trial.txt',dtype=Clt_data_dtype)
  

ВЫВОД :

 ('READ_ARRAY_shape :', (2L,))

('READ_ARRAY :', array([((nan, nan), nan, nan), ((nan, nan), nan, nan)], 'V32'))
  

Надеюсь, что кто-нибудь сможет помочь мне и заранее спасибо за любой ввод

также обратите внимание, что я не могу использовать pandas, поскольку я использую его только для numpy compatable program

Комментарии:

1. trial.txt достаточно мал, чтобы вы могли скопировать и вставить его в вопрос. Нам это нравится гораздо больше, чем изображение. Какую savetxt команду вы использовали?

Ответ №1:

 In [17]: Cord_dtype = np.dtype([('X', np.float64), ('Y', np.float64)])
    ...: Clt_data_dtype=np.dtype([('Coord', Cord_dtype),('Angle', np.float64), ('Length', np.float64)])
  

Создание вашего массива:

 In [18]: arr = np.array([ [ ((10, 10), 20, 300.), ((20, 20), 20, 300.) ],
    ...:   [((30, 30), 30, 300.), ((40, 40), 40, 300.)] ], dtype=Clt_data_dtype)
    ...: 
    ...: 
In [19]: arr
Out[19]: 
array([[((10., 10.), 20., 300.), ((20., 20.), 20., 300.)],
       [((30., 30.), 30., 300.), ((40., 40.), 40., 300.)]],
      dtype=[('Coord', [('X', '<f8'), ('Y', '<f8')]), ('Angle', '<f8'), ('Length', '<f8')])
In [20]: arr.shape
Out[20]: (2, 2)
  

genfromtxt можно воссоздать его из csv файла стиля, например:

 In [21]: txt = """10 10 20 300.
    ...: 20 20 20 300.
    ...: 30 30 30 300.
    ...: 40 40 40 300.
    ...: """
     
In [22]: np.genfromtxt(txt.splitlines(), dtype=Clt_data_dtype)
Out[22]: 
array([((10., 10.), 20., 300.), ((20., 20.), 20., 300.),
       ((30., 30.), 30., 300.), ((40., 40.), 40., 300.)],
      dtype=[('Coord', [('X', '<f8'), ('Y', '<f8')]), ('Angle', '<f8'), ('Length', '<f8')])
  

На самом csv деле это просто содержит строки и столбцы чисел. У него нет разделителей и () что ваши img шоу. Возможно, можно проанализировать ваше изображение и создать файл, но csv читатель не может справиться.