exponenta event banner

bsxfun

Применение операции по элементам к двум массивам с включенным неявным расширением

Синтаксис

Описание

пример

C = bsxfun(fun,A,B) применяет двоичную операцию по элементам, заданную дескриптором функции fun ко множествам A и B.

Примеры

свернуть все

Вычитание среднего значения столбца из соответствующих элементов столбца матрицы 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

Создайте дескриптор функции, который представляет функцию f (a, b) = 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 должна быть двоичной (двухвходовой) элементной функцией вида 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 является одиночным (равным единице), bsxfun виртуально реплицирует массив вдоль этого измерения в соответствии с другим массивом. В случае, когда измерение A или B singleton, и соответствующее измерение в другом массиве равно нулю, bsxfun фактически уменьшает размер одиночки до нуля.

Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64 | char | logical
Поддержка комплексного номера: Да

Совет

  • Рекомендуется заменить большинство видов использования bsxfun с прямыми вызовами функций и операторов, поддерживающих неявное расширение. По сравнению с использованием bsxfunнеявное расширение обеспечивает более высокую скорость выполнения, лучшее использование памяти и улучшенную читаемость кода. Дополнительные сведения см. в разделе Совместимые размеры массивов для основных операций.

Расширенные возможности

..
Представлен в R2007a