Подтвердить что ты не робот

GNU Octave для работы с каждым элементом в матрице. Пример октавы "arrayfun (...)"

В GNU Octave версии 3.4.3 у меня возникают проблемы с применением настраиваемой функции для работы с каждым элементом/элементом в матрице.

У меня есть матрица:

mymatrix = [1,2,3;4,5,6];

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

4b9b3361

Ответ 1

Простейший способ, Как указал Насер, следующий октавный код:

[email protected](x) x+5;
A = [1, 0, -1; 3, 4, 5];
result = f(A)
result

применяется (x + 5) к каждому переданному элементу, он печатает:

result =
    6    5    4
    8    9   10

Ответ 2

arrayfun хорошо работает для этого:

arrayfun(@(x) 1/(1+e^(-x)), [0, 1; 2, 3])

Вывод:

ans =

   0.50000   0.73106
   0.88080   0.95257

Это в основном запускает функцию 1/(1+e^(-x)) для каждого элемента матрицы/vector.

Ответ 3

Поместите этот код в имя файла под названием "myfun.m"

function [ out ] = myfun(num)
  out = num + 5;
end

Поместите этот код в имя файла под названием "main.m"

arrayfun(@myfun, [1, 0, -1; 3, 4, 5] )

Вывод:

ans =
   6   5   4
   8   9   10

Обратите внимание, как процедура (добавление 5) была применена к каждому элементу в матрице.

Ответ 4

В качестве альтернативы вы можете использовать операторы element-wise, подобные следующим (обратите внимание на префикс точки):

  • . +
  • .-
  • ./
  • е. ^

Например

mymatrix = 1 ./ (1 .+ e.^(-mymatrix));