скопировать numy recarray в ndarray - PullRequest
       0

скопировать numy recarray в ndarray

0 голосов
/ 05 октября 2018

У меня есть процесс, который требует извлечения данных из числового массива в ndarray, где я затем делаю некоторую векторную математику.(Recarray происходит из функции pytables table.read ().) Я хочу отобразить математический вывод (другой ndarray) обратно в те же поля / столбцы в исходном recarray.Я нашел способ сделать это столбец за столбцом.В поисках лучшего способа работы с данными.мой код:

node_eigen_array = eigenvb_table.read_coordinates(node_rows)
node_eigen_array.shape[0]
10
node_eigen_array.dtype
dtype([('ID', '<i8'), ('X', '<f8'), ('Y', '<f8'), ('Z', '<f8'),  ('FREQ', '<i8')])
resvec_array[:,0]=node_eigen_array['X']
resvec_array[:,1]=node_eigen_array['Y']
resvec_array[:,2]=node_eigen_array['Z']

# do some stuff that returns ndarray c_dot...

node_eigen_array['X']=cdot[:,0]
node_eigen_array['Y']=cdot[:,1]
node_eigen_array['Z']=cdot[:,2]

Я пытался пропустить первый повторный массив к ndarray:

resvec_array=node_eigen_array[['X','Y','Z']].view('float64').reshape((10,3))

numpy жалуется:

This code may break in numpy 1.13 because this will return a view instead of a copy -- see release notes for details.

Кроме того, ищет что-то, чтоупрощает ndarray данные обратно в rearray.Благодаря.

1 Ответ

0 голосов
/ 05 октября 2018

Это будущее предупреждение, а не ошибка.Изменение было отложено до 1.16.Это связано с многопольным индексированием, ваш [['X','Y','Z']] шаг.

In [56]: dt = np.dtype([('ID', '<i8'), ('X', '<f8'), ('Y', '<f8'), ('Z', '<f8'), ('FREQ', '<i8')])
In [57]: arr = np.ones(3, dtype=dt)
In [58]: arr       # a structured array, recarray is just variation
Out[58]: 
array([(1, 1., 1., 1., 1), (1, 1., 1., 1., 1), (1, 1., 1., 1., 1)],
      dtype=[('ID', '<i8'), ('X', '<f8'), ('Y', '<f8'), ('Z', '<f8'), ('FREQ', '<i8')])

Тихо, когда вы просто просматриваете поля:

In [59]: arr[['X','Y','Z']]
Out[59]: 
array([(1., 1., 1.), (1., 1., 1.), (1., 1., 1.)],
      dtype=[('X', '<f8'), ('Y', '<f8'), ('Z', '<f8')])

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

In [60]: arr[['X','Y','Z']].view('float64')
/usr/local/bin/ipython3:1: FutureWarning: Numpy has detected that you may be viewing or writing to an array returned by selecting multiple fields in a structured array. 

This code may break in numpy 1.16 because this will return a view instead of a copy -- see release notes for details.
  #!/usr/bin/python3
Out[60]: array([1., 1., 1., 1., 1., 1., 1., 1., 1.])

Чтобы отключить предупреждение, добавьте copy() после индексации:

In [62]: arr[['X','Y','Z']].copy().view('float64')
Out[62]: array([1., 1., 1., 1., 1., 1., 1., 1., 1.])

В настоящее время это изменение view работает.Но в запланированном изменении макет данных arr[['X','Y','Z']] будет другим, и view не будет работать.Есть несколько сложных вопросов о смещениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...