在找到处理空结构的逻辑之后,我想检查这是如何推广到矩阵的.
在这里我注意到以下内容:
如果您有1x1矩阵,并分配给第一个元素.它与分配给所有元素不同.
这让我感到很惊讶,因为第一个元素与本案例中的所有元素完全相同.以下是我的观察:
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(:,:) = []
Run Code Online (Sandbox Code Playgroud)
看到这个之后,我的问题是:
为什么以不同的方式分配同一个东西,导致四种不同的结果?
它看起来像是一致性的东西.
让我们考虑一个更大的矩阵,看看行为是否与a 1- 1matrix 一致(扰流警报,在我看来):
X = rand(3);
Run Code Online (Sandbox Code Playgroud)
情况1:
X(1,1) = []
Run Code Online (Sandbox Code Playgroud)
这项工作毫无意义.我们无法保留形状并丢弃单个元素,因此我们得到尺寸不匹配误差,这与您的观察结果一致.另外尺寸不符的是,我们正在试图迫使相应的错误0-by- 0矩阵划分成1-by- 1插槽.(顺便说一句在一个侧面说明,你说size(z)给你[1 1],但size(z, 3)也给你1也是如此size(z,7)等所以实际上这是一个[1 1 1 ...矩阵)
案例2:
X(1) = []
Run Code Online (Sandbox Code Playgroud)
这导致了X这样size(X)的1-by- 8,MATLAB似乎高兴,如果你指定的线性指标进行线性化的矩阵.这对我来说很有意义,再次是一致的1-by- 1情况下,因为它会导致1-by- numel(X)-1矩阵(即1-by- 0为X = 1)
案例3:
X(1,:) = []
Run Code Online (Sandbox Code Playgroud)
这很简单,删除第一行,所以现在我们有一个n-1-by- mmatrix.因此,一个3-by- 3成为2-by- 3所以我很高兴有1-by- 1成为0-by- 1在这种情况下.注意,X(:,1) = []在类似的情况下也是一致的.
案例4:
X(:) = []
Run Code Online (Sandbox Code Playgroud)
这个有意义,重新分配整个矩阵.没有问题.没有歧义.
所以即使确定,他们都可以毫不含糊地指出同样的事情.我认为,对于MATLAB而言,具有与大矩阵一致的不同结果,而不是对单个元素矩阵总是做同样的事情,这是一个非常合理的设计选择.
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |