Как выполнить операцию exp() поэлементно в Juila?

Я новичок в Джулии, и это кажется простой операцией, но по какой-то причине я нигде не нахожу ответа.

Я просматривал некоторые учебные пособия в Интернете, и они просто используют exp (A), где A - матрица nxm, но это дает мне ошибку DimensionMismatch.

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


person Jeremy    schedule 08.12.2019    source источник


Ответы (3)


В julia операции над матрицами обрабатывают матрицу как объект, а не набор чисел. Таким образом, exp(A) пытается выполнить экспоненциальную матрицу, которая определена только для квадратных матриц. Чтобы получить поэлементные операции над матрицами, вы используете широковещательную передачу, которая выполняется с помощью оператора точки. Таким образом, здесь вы хотите exp.(A).

Этот дизайн используется, потому что он позволяет выполнять любые скалярные операции с массивами, а не только те, которые встроены в язык.

person Oscar Smith    schedule 08.12.2019

Оператор вещания . всегда изменяет функцию на "элементарную". Следовательно, ответ exp.(A), точно так же, как sin.(A), cos.(A) или f.(A) для любого пользовательского f.

person Chris Rackauckas    schedule 08.12.2019

В дополнение к приведенному выше ответу можно также рассмотреть оператора широковещательной передачи с функциональным конвейером:

A = rand(-10:10, 3, 3)

A .|> sin .|> inv
person Meow    schedule 09.12.2019