complex h5 Файл, чтобы показать - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть файл сложного типа h5. 2d массив. Я хочу показать это. Но у меня есть следующая ошибка. Что не так?

import h5py 
import numpy as np 
import matplotlib.pyplot as plt

with h5py.File('obj_0001.h5', 'r') as hdf:
    ls = list(hdf.keys())
    print('List of datasets in thies file: \n', ls)
    data = hdf.get('dataset')

    diff = np.array(data)
    print('Shape of dataset: \n', diff.shape)

plt.figure(1)
plt.imshow(np.abs(diff))
plt.savefig('diff_test.png')
plt.show()
UFuncTypeError: ufunc 'absolute' did not contain a loop with signature matching types dtype([('real', '<f4'), ('imag', '<f4')]) -> dtype([('real', '<f4'), ('imag', '<f4')])

1 Ответ

0 голосов
/ 22 апреля 2020

Согласно http://docs.h5py.org/en/stable/faq.html#what -данные-поддерживаемые типы

h5py поддерживает комплексный тип d, представляя HDF5 struc.

Ошибка указывает diff.dtype это dtype([('real', '<f4'), ('imag', '<f4')]). Я не знаю, является ли это результатом вашего np.array(data) преобразования или что-то другое в том, как данные хранятся в файле.

diff = data[:]

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

Но если diff является этим структурированным массивом, вы можете создать сложный dtype с помощью:

In [303]: arr2 = np.ones((3,), np.dtype([('real','f'),('imag','f')]))                                  
In [304]: arr2                                                                                         
Out[304]: 
array([(1., 1.), (1., 1.), (1., 1.)],
      dtype=[('real', '<f4'), ('imag', '<f4')])
In [305]: arr3 = arr2['real']+1j*arr2['imag']                                                          
In [306]: arr3                                                                                         
Out[306]: array([1.+1.j, 1.+1.j, 1.+1.j], dtype=complex64)

тестирования в abs:

In [307]: np.abs(arr2)                                                                                 
---------------------------------------------------------------------------
UFuncTypeError                            Traceback (most recent call last)
<ipython-input-307-333e28818b26> in <module>
----> 1 np.abs(arr2)

UFuncTypeError: ufunc 'absolute' did not contain a loop with signature matching types dtype([('real', '<f4'), ('imag', '<f4')]) -> dtype([('real', '<f4'), ('imag', '<f4')])
In [308]: np.abs(arr3)                                                                                 
Out[308]: array([1.4142135, 1.4142135, 1.4142135], dtype=float32)
...