Разница между первым элементом матрицы 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, чтобы иметь разные результаты, которые согласуются с большими матрицами, чем всегда делают то же самое для одного элемента матрица.