Примените поэлементную операцию к двум массивам с включенным неявным расширением
Вычтите среднее значение столбца из соответствующих элементов столбца матричного A
. Затем нормируйте стандартным отклонением.
A = [1 2 10; 3 4 20; 9 6 15]; C = bsxfun(@minus, A, mean(A)); D = bsxfun(@rdivide, C, std(A))
D = 3×3
-0.8006 -1.0000 -1.0000
-0.3203 0 1.0000
1.1209 1.0000 0
В MATLAB® R2016b и позже, можно непосредственно использовать операторы вместо bsxfun
, поскольку операторы независимо поддерживают неявное расширение массивов с совместимыми размерами.
(A - mean(A))./std(A)
ans = 3×3
-0.8006 -1.0000 -1.0000
-0.3203 0 1.0000
1.1209 1.0000 0
Сравните элементы в вектор-столбце и векторе-строке. Результатом является матрица, содержащая сравнение каждой комбинации элементов от векторов. Эквивалентный способ выполнить эту операцию с A > B
.
A = [8; 17; 20; 24]
A = 4×1
8
17
20
24
B = [0 10 21]
B = 1×3
0 10 21
C = bsxfun(@gt,A,B)
C = 4x3 logical array
1 0 0
1 1 0
1 1 0
1 1 1
Создайте указатель на функцию, который представляет функцию .
fun = @(a,b) a - exp(b);
Используйте bsxfun
применять функцию к векторам a
и b
. bsxfun
функция расширяет векторы в матрицы, одного размера, который является эффективным способом оценить fun
для многих комбинаций входных параметров.
a = 1:7; b = pi*[0 1/4 1/3 1/2 2/3 3/4 1].'; C = bsxfun(fun,a,b)
C = 7×7
0 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000
-1.1933 -0.1933 0.8067 1.8067 2.8067 3.8067 4.8067
-1.8497 -0.8497 0.1503 1.1503 2.1503 3.1503 4.1503
-3.8105 -2.8105 -1.8105 -0.8105 0.1895 1.1895 2.1895
-7.1205 -6.1205 -5.1205 -4.1205 -3.1205 -2.1205 -1.1205
-9.5507 -8.5507 -7.5507 -6.5507 -5.5507 -4.5507 -3.5507
-22.1407 -21.1407 -20.1407 -19.1407 -18.1407 -17.1407 -16.1407
fun
— Двоичная функция, чтобы применятьсяДвоичная функция, чтобы применяться в виде указателя на функцию. fun
должен быть двоичный файл (2D вход) поэлементная функция формы C = fun(A,B)
это принимает массивы A
и B
с совместимыми размерами. Для получения дополнительной информации см. "Совместимые размеры массивов для основных операций". fun
должен поддержать скалярное расширение, такое что если A
или B
скаляр, затем C
результат применения скаляра к каждому элементу в другом входном массиве.
В MATLAB® R2016b и позже, встроенные двоичные функции, перечисленные в этой таблице независимо, поддерживают неявное расширение. С этими функциями можно вызвать функцию или оператор непосредственно вместо того, чтобы использовать bsxfun
. Например, можно заменить C = bsxfun(@plus,A,B)
с A+B
.
Функция | Символ | Описание |
---|---|---|
plus |
| Плюс |
minus |
| Минус, |
times |
| Массив умножается |
rdivide |
| Правый массив делится |
ldivide |
| Левый массив делится |
power |
| Степень массивов |
eq |
| Равный |
ne |
| Не равный |
gt |
| Больше, чем |
ge |
| Больше, чем или равный |
lt |
| Меньше, чем |
le |
| Меньше чем или равный |
and |
| Поэлементный логический AND |
or |
| Поэлементный логический OR |
xor | Нет данных | Логическое исключающее ИЛИ |
max | Нет данных | Бинарный максимум |
min | Нет данных | Бинарный минимум |
mod | Нет данных | Модуль после деления |
rem | Нет данных | Остаток после деления |
atan2 | Нет данных | Обратный тангенс с четырьмя квадрантами; приведите к радианам |
atan2d | Нет данных | Обратный тангенс с четырьмя квадрантами; закончитесь в градусах |
hypot | Нет данных | Квадратный корень из суммы квадратов |
Пример: C = bsxfun(@plus,[1 2],[2; 3])
Типы данных: function_handle
A,B
— Входные массивыВходные массивы в виде скаляров, векторов, матриц или многомерных массивов. Входные параметры A
и B
должен иметь совместимые размеры. Для получения дополнительной информации см. "Совместимые размеры массивов для основных операций". Каждый раз, когда размерность A
или B
одиночный элемент (равный одному), bsxfun
фактически реплицирует массив по тому измерению, чтобы совпадать с другим массивом. В случае, где размерность A
или B
одиночный элемент, и соответствующая размерность в другом массиве является нулем, bsxfun
фактически уменьшает одноэлементную размерность, чтобы обнулить.
Типы данных: single
| double
| uint8
| uint16
| uint32
| uint64
| int8
| int16
| int32
| int64
| char
| logical
Поддержка комплексного числа: Да
Рекомендуется, чтобы вы заменили большую часть использования bsxfun
с прямыми вызовами функций и операторов то неявное расширение поддержки. По сравнению с использованием bsxfun
, неявное расширение предлагает более быструю скорость выполнения, лучшее использование памяти и улучшенную удобочитаемость кода. Для получения дополнительной информации см. "Совместимые размеры массивов для основных операций".
Указания и ограничения по применению:
Заданная функция не должна использовать persistent
переменные.
Для получения дополнительной информации см. Раздел "Высокие массивы".
Указания и ограничения по применению:
Генерация кода не поддерживает входные параметры разреженной матрицы для этой функции.
Указания и ограничения по применению:
Генерация кода не поддерживает входные параметры разреженной матрицы для этой функции.
Указания и ограничения по применению:
Смотрите bsxfun
в документации Parallel Computing Toolbox™.
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.