Большинство двоичных (с двумя входами) операторов и функций в MATLAB® поддерживает числовые массивы, которые имеют совместимые размеры. Два входа имеют совместимые размеры, если для каждого измерения размерности входов либо одинаковы, либо один из них равен 1. В самых простых случаях два размера массивов совместимы, если они в точности одинаковы или если один скаляр. MATLAB неявно расширяет массивы с совместимыми размерами, чтобы быть одинаковым размером во время выполнения поэлементной операции или функции.
Это некоторые комбинации скаляров, векторов и матриц, которые имеют совместимые размеры:
Два входов имеют одинаковый размер.
Один вход является скаляром.
Один вход является матрицей, а другой - вектором-столбцом с одинаковым числом строк.
Один вход является вектором-столбцом, а другой - вектор-строка.
Каждый массив в MATLAB имеет последующие измерения размера 1. Для многомерных массивов это означает, что матрица 3 на 4 совпадает с матрицей размера 3 на 4 на 1 на 1 на 1. Примерами многомерных массивов с совместимыми размерами являются:
Один вход является матрицей, а другой - трехмерным массивом с одинаковым числом строк и столбцов.
Один вход является матрицей, а другой - трехмерным массивом. Размерности все одинаковые или один из них равен 1.
Правила одинаковы для пустых массивов или массивов с нулевым размером размерности. Размер размерности, не равный 1, определяет размер выхода. Это означает, что размерности с нулевым размером должны быть в паре с размерностью 1 или 0 в другом массиве, и что выход имеет размер 0.
A: 1-by-0 B: 3-by-1 Result: 3-by-0
Несовместимые входы имеют размеры, которые не могут быть неявно расширены, чтобы быть одинаковыми по размеру. Для примера:
Один из размерности размеров не равен, и ни один из них не равен 1.
A: 3-by-2 B: 4-by-2
Два нескалярных векторов-строк с длинами, которые не совпадают.
A: 1-by-3 B: 1-by-4
Чтобы упростить векторно-матричные операции, используйте неявное расширение с размерными функциями, такими как sum
, mean
, min
, и другие.
Например, вычислите среднее значение каждого столбца в матрице, затем вычитайте среднее значение из каждого элемента.
A = magic(3)
A = 8 1 6 3 5 7 4 9 2
C = mean(A)
C = 5 5 5
A - C
ans = 3 -4 1 -2 0 2 -1 4 -3
Векторы строка и столбец имеют совместимые размеры, и когда вы выполняете операцию над ними, результатом является матрица.
Для примера добавьте вектор строка и столбец. Результат такой же, как и bsxfun(@plus,a,b)
.
a = [1 2 3 4]
ans = 1 2 3 4
b = [5; 6; 7]
ans = 5 6 7
a + b
ans = 6 7 8 9 7 8 9 10 8 9 10 11