Применение операции по элементам к двум массивам с включенным неявным расширением
Вычитание среднего значения столбца из соответствующих элементов столбца матрицы 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
Создайте дескриптор функции, который представляет функцию a-eb.
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 должна быть двоичной (двухвходовой) элементной функцией вида C = fun(A,B) который принимает массивы A и B с совместимыми размерами. Дополнительные сведения см. в разделе Совместимые размеры массивов для основных операций. fun должен поддерживать скалярное расширение, такое, что если A или B является скаляром, то C является результатом применения скаляра к каждому элементу в другом входном массиве.
В R2016b MATLAB ® и более поздних версиях встроенные двоичные функции, перечисленные в этой таблице, независимо поддерживают неявное расширение. С помощью этих функций можно вызвать функцию или оператор непосредственно вместо использованияbsxfun. Например, можно заменить C = bsxfun(@plus,A,B) с A+B.
| Функция | Символ | Описание |
|---|---|---|
plus |
| Плюс |
minus |
| Минус |
times |
| Умножение массива |
rdivide |
| Разделение правого массива |
ldivide |
| Разделение левого массива |
power |
| Мощность массива |
eq |
| Равный |
ne |
| Не равно |
gt |
| Больше, чем |
ge |
| Больше или равно |
lt |
| Меньше, чем |
le |
| Меньше или равно |
and |
| Логическое И |
or |
| Логическое ИЛИ на основе элементов |
xor | Н/Д | Логическое исключающее ИЛИ |
bitand | Н/Д | Побитовое И |
bitor | Н/Д | Побитовое ИЛИ |
bitxor | Н/Д | Побитовый 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 singleton, и соответствующее измерение в другом массиве равно нулю, bsxfun фактически уменьшает размер одиночки до нуля.
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64 | char | logical
Поддержка комплексного номера: Да
Рекомендуется заменить большинство видов использования bsxfun с прямыми вызовами функций и операторов, поддерживающих неявное расширение. По сравнению с использованием bsxfunнеявное расширение обеспечивает более высокую скорость выполнения, лучшее использование памяти и улучшенную читаемость кода. Дополнительные сведения см. в разделе Совместимые размеры массивов для основных операций.
Примечания и ограничения по использованию:
Указанная функция не должна полагаться на persistent переменные.
Дополнительные сведения см. в разделе Массивы Tall.
Примечания и ограничения по использованию:
Генерация кода не поддерживает разреженные матричные входы для этой функции.
Примечания и ограничения по использованию:
Генерация кода не поддерживает разреженные матричные входы для этой функции.
Примечания и ограничения по использованию:
Посмотрите bsxfun(Панель инструментов параллельных вычислений).
Эта функция полностью поддерживает распределенные массивы. Дополнительные сведения см. в разделе Запуск функций MATLAB с распределенными массивами (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.