AttributeError: exp при использовании numpy для данных, загруженных с использованием scipy.io.loadmat - PullRequest
0 голосов
/ 20 сентября 2018

Я получаю следующий вывод из модульного теста ниже:

[[array([[-1.57079633]])]]
[[array([[0.+1.57079633j]])]]
<module 'numpy' from '/usr/local/lib/python2.7/dist-packages/numpy/__init__.pyc'>
E
======================================================================
ERROR: test_TestWECTrain_BasicEnv_SetupAndStepping (__main__.Test_exp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "Test_exp.py", line 34, in test_TestWECTrain_BasicEnv_SetupAndStepping
    expsigmatphase = np.exp(tmp)
AttributeError: exp

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

Вот модульный тест

import unittest
import os
import scipy.io as sio
import numpy as np
from pprint import pprint

class Test_exp (unittest.TestCase):

    def test_exp (self):

        data_file = "test_buoysimoptions.mat"

        buoysimoptions = sio.loadmat (data_file)

        t = 0.0
        phase = buoysimoptions['SeaParameters']['phase']
        sigma = buoysimoptions['SeaParameters']['sigma']

        sigmatminusphase = sigma * t - phase; print (sigmatminusphase)
        tmp = -1.0j * sigmatminusphase; print (tmp)
        print (np)
        tmp = np.asarray(tmp)
        expsigmatphase = np.exp(tmp)


if __name__ == '__main__':
    unittest.main()

Входной файл (2,9 КБ) можно скачать здесь: https://www.dropbox.com/s/psq1gq8xpjivrim/test_buoysimoptions.mat?dl=0

Почему я получаю ошибку AttributeError: exp?

Обратите внимание, что это идентично "AttributeError: exp" при использовании numpy.exp () в обычном обычном массиве , но на этот вопрос никогда не отвечали и не дают минимального примера, как я.

Это в Python 2.7, в Python 3.5 я получаю:

[[array([[-1.57079633]])]]
[[array([[0.+1.57079633j]])]]
E
======================================================================
ERROR: test_exp (__main__.Test_exp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "Test_exp.py", line 25, in test_exp
    expsigmatphase = np.exp(tmp)
AttributeError: 'numpy.ndarray' object has no attribute 'exp'

----------------------------------------------------------------------
Ran 1 test in 0.002s

FAILED (errors=1)

Редактировать: дополнительная информация озагруженные данные

Я ожидал, что buoysimoptions['SeaParameters']['phase'] будет просто пустым массивом, но, похоже, нет, см. ниже, что в конечном итоге вызывает ошибку

>>> phase = buoysimoptions['SeaParameters']['phase']
>>> phase
array([[array([[1.57079633]])]], dtype=object)
>>> phase = buoysimoptions['SeaParameters']['phase'][0]
>>> phase
array([array([[1.57079633]])], dtype=object)
>>> phase = buoysimoptions['SeaParameters']['phase'][0][0]
>>> phase
array([[1.57079633]])

, мне нужно индексировать [0] [0] всегда просто получить фактический массив?Что правильно делать здесь?Если я использую последний, ошибка exp исчезнет.

1 Ответ

0 голосов
/ 20 сентября 2018

Оказывается, ответ прост: эти загруженные переменные сами по себе были структурами matlab, и я не указывал индекс при их извлечении, правильная вещь заключается в следующем (обратите внимание на дополнительные [0,0] с при получениифаза и сигма):

import unittest
import os
import scipy.io as sio
import numpy as np
from pprint import pprint

class Test_exp (unittest.TestCase):

    def test_exp (self):

        data_file = "test_buoysimoptions.mat"

        buoysimoptions = sio.loadmat (data_file)

        t = 0.0
        phase = buoysimoptions['SeaParameters'][0,0]['phase']
        sigma = buoysimoptions['SeaParameters'][0,0]['sigma']

        sigmatminusphase = sigma * t - phase; print (sigmatminusphase)
        tmp = -1.0j * sigmatminusphase; print (tmp)
        print (np)
        tmp = np.asarray(tmp)
        expsigmatphase = np.exp(tmp)


if __name__ == '__main__':
    unittest.main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...