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. The 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 является результатом применения скаляра к каждому элементу в другом входном массиве.

В MATLAB® R2016b и позже встроенные двоичные функции, перечисленные в этой таблице, независимо поддерживают неявное расширение. С помощью этих функций можно вызвать функцию или оператора непосредственно вместо использования bsxfun. Для примера можно заменить C = bsxfun(@plus,A,B) с A+B.

ФункцияСимволОписание
plus

+

Плюс

minus

-

Минус

times

.*

Умножение массива

rdivide

./

Разделение правого массива

ldivide

.\

Разделение левого массива

power

.^

Степень массива

eq

==

Равный

ne

~=

Не равен

gt

>

Больше, чем

ge

>=

Больше или равно

lt

<

Меньше, чем

le

<=

Меньше чем или равно

and

&

Поэлементный логический И

or

|

Поэлементный логический OR

xor

Н/Д

Логический эксклюзивный OR

bitand

Н/Д

Битовый И

bitor

Н/Д

Битовый OR

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 является синглтоном, и соответствующая размерность в другом массиве равна нулю bsxfun фактически уменьшает размерность синглтона до нуля.

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

Совет

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

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

..
Введенный в R2007a