Разница между первым элементом матрицы 1x1 и всеми элементами матрицы 1x1
после нахождения некоторой логики в как пустые структуры рассматриваются, Я хотел проверить, как это обобщить на матрицы.
здесь я заметил следующее:
Если у вас есть матрица 1x1, и назначьте первому элементу. Это не то же самое, что присвоение всем элементам.
Это скорее удивило меня, поскольку первый элемент такой же, как и все элементы в этом случае. Вот мои наблюдения:--4-->
x = 1;
y = 1;
z = 1;
x(:) = []; % Evaluates to [] as I expected
y(1) = []; % Evaluates to Empty matrix: 1-by-0, rather than []
z(1,1) = []; %Throws an error: 'Subscripted assignment dimension mismatch.' even though size(z) gives [1 1];
z(1,:) = []; % Evaluates to Empty matrix: 0-by-1, just like z(:,:) = []
после просмотра вот мой вопрос:
почему назначение одной и той же вещи разными способами приводит к четырем различным результатам?
1 ответов
это просто похоже на последовательность.
давайте рассмотрим большую матрицу и посмотрим, согласуется ли поведение с 1 - by -1 матрица (предупреждение спойлера, на мой взгляд):
X = rand(3);
Пример 1:
X(1,1) = []
не имеет смысла, чтобы это сработало. Мы не можем сохранить форму и отбросить один элемент, поэтому мы получаем ошибку несоответствия размеров, что согласуется с вашим наблюдением. Также размер несоответствие является соответствующей ошибкой, поскольку мы пытаемся заставить 0 - by -0 матрицы в 1 - by -1 слот. (Кстати, на боковой ноте вы говорите size(z) дает [1 1] но size(z, 3) дает 1 и size(z,7) etc так что на самом деле это [1 1 1 ... матрица)
Пример 2:
X(1) = []
в результате X такое, что size(X) is 1 - by -8, MATLAB, похоже, рад линеаризовать вашу матрицу, если вы укажете линейный индекс. Это имеет смысл для меня, и снова соответствует 1 - by -1 случае, так как это приводит к 1 - by -numel(X)-1 матрица (т. е. 1 - by -0 на X = 1)
Случай 3:
X(1,:) = []
это довольно прямо вперед, снимите первый ряд, так что теперь у нас есть n-1 - by -m матрица. Так 3 - by -3 становится 2 - by -3 так что я доволен 1 - by -1 становится 0 - by -1 in этот случай. Обратите внимание, что X(:,1) = [] также последователен в подобном ключе.
пример 4:
X(:) = []
это просто имеет смысл, переписать всю матрицу. Никакой вопрос. Нет никакой двусмысленности.
так что, хотя они и уверены, все они могут однозначно означать одно и то же. Я думаю, что это вполне разумный выбор дизайна для MATLAB, чтобы иметь разные результаты, которые согласуются с большими матрицами, чем всегда делают то же самое для одного элемента матрица.