GNU Octave для работы с каждым элементом в матрице. Пример октавы "arrayfun (...)"
В GNU Octave версии 3.4.3 у меня возникают проблемы с применением настраиваемой функции для работы с каждым элементом/элементом в матрице.
У меня есть матрица:
mymatrix = [1,2,3;4,5,6];
Я хочу использовать каждый элемент матрицы в качестве входных данных и запускать для него настраиваемую функцию, а выход функции заменяет содержимое элемента mymatrix по элементу.
Ответы
Ответ 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));