В большинстве случаев (см. Ниже исключение) реальной разницы нет.И то и другое считается «пустым» , поскольку хотя бы одно измерение имеет размер 0. Однако я бы не назвал это ошибкой, поскольку в качестве программиста вы можете захотеть увидеть эту информацию в некоторых случаях.
Скажем, например, у вас есть двумерная матрица, и вы хотите проиндексировать некоторые строки и несколько столбцов для извлечения в меньшую матрицу:
>> M = magic(4) %# Create a 4-by-4 matrix
M =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> rowIndex = [1 3]; %# A set of row indices
>> columnIndex = []; %# A set of column indices, which happen to be empty
>> subM = M(rowIndex,columnIndex)
subM =
Empty matrix: 2-by-0
Обратите внимание, что пустой результат по-прежнемусообщает вам некоторую информацию, в частности, что вы пытались проиндексировать 2 строки из исходной матрицы.Если бы результат только показал []
, вы бы не знали, был ли он пустым, потому что ваши индексы строк были пусты, или ваши индексы столбцов были пусты, или оба.
The Caveat ...
В некоторых случаях пустая матрица, определенная как []
(то есть все ее измерения равны 0), может дать вам результаты, отличные от пустой матрицы, которая все еще имеет некоторые ненулевые измерения.Например, умножение матриц может дать вам разные (и несколько не интуитивные) результаты при работе с разными видами пустых матриц.Давайте рассмотрим эти 3 пустые матрицы:
>> a = zeros(1,0); %# A 1-by-0 empty matrix
>> b = zeros(0,1); %# A 0-by-1 empty matrix
>> c = []; %# A 0-by-0 empty matrix
Теперь давайте попробуем умножить их вместе по-разному:
>> b*a
ans =
[] %# We get a 0-by-0 empty matrix. OK, makes sense.
>> a*b
ans =
0 %# We get a 1-by-1 matrix of zeroes! Wah?!
>> a*c
ans =
Empty matrix: 1-by-0 %# We get back the same empty matrix as a.
>> c*b
ans =
Empty matrix: 0-by-1 %# We get back the same empty matrix as b.
>> b*c
??? Error using ==> mtimes
Inner matrix dimensions must agree. %# The second dimension of the first
%# argument has to match the first
%# dimension of the second argument
%# when multiplying matrices.
Вероятно, достаточно получить непустую матрицу путем умножения двух пустых матриц.чтобы у вас болела голова, но это имеет смысл, так как результат все равно ничего не содержит (т. е. имеет значение 0).