Возведение скаляра в степень элементов матрицы

1

Я хочу вычислить следующее с помощью numpy:

density = 1.474085291*(0.9998541833**h)

где h - 1*12 matrix. Я бы хотел, чтобы база была 0.9998541833 и степенями (экспонентами) были элементы матрицы h. Я пробовал документацию numpy.power, но не могу найти решение.

  • 0
    Вы должны показать ошибку. Если h является обычным массивом numpy, ваш код должен работать. Только когда h - это np.matrix , ** возникают проблемы. Но np.power(.99, h) все еще работает. Это еще одна причина избегать использования np.matrix если он вам действительно не нужен.
  • 0
    Проблема с np.matrix заключается в том, что он переопределяет ** ( __pow__ ) как оператор мощности матрицы, np.linalg.matrix_power . как в np.matrix(eye(3))**4 . Точно так же * переопределяется как умножение матриц (например, np.dot ).
Теги:
numpy

2 ответа

1
Лучший ответ
base = 0.9998541833
density = 1.474085291 * np.array(base)**h
  • 0
    np.array(base) ** h должно быть достаточно.
  • 0
    @hpaulj, не будет ли создан полный массив h.shape под капотом? Будет ли разница в производительности? Поправьте меня, если я ошибаюсь, но я предполагаю, что база ** ч - просто синтаксический сахар.
Показать ещё 2 комментария
2

Это довольно просто: у вас уже есть код на месте. Просто сформируйте свой массив h, и ваш готов к работе:

>>> import numpy as np
>>> h = np.array([1, 2, 3, 4, 5, 6])
>>> h
array([1, 2, 3, 4, 5, 6])
>>> density = 1.474085291*(0.9998541833**h)
>>> density
array([ 1.47387034,  1.47365543,  1.47344055,  1.47322569,  1.47301087,
        1.47279608])
  • 0
    что если 'h' определено как np.matrix?
  • 1
    @Ehsan Я предлагаю изменить решение на это. Здесь нет необходимости использовать full функцию. Также я рекомендую прочитать о NumPy трансляции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню