matlab - 1x1 矩阵的第一个元素与 1x1 矩阵的所有元素之间的差异

标签 matlab matrix

how empty structs are dealt with 中找到一些逻辑之后,我想检查一下这是如何推广到矩阵的。

在这里我注意到了以下几点:

如果您有一个 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(:,:) = []

看到这个之后我的问题是:

为什么以不同的方式分配给同一事物会导致四种不同的结果?

最佳答案

这似乎只是一个一致性问题。

让我们考虑一个更大的矩阵,看看行为是否与 1-by-1 矩阵一致(剧透警告,我认为是):

X = rand(3);

案例 1:

X(1,1) = []

这样做是没有意义的。我们无法保留形状并删除单个元素,因此我们会出现尺寸不匹配错误,这与您的观察结果一致。维度不匹配也是一个适当的错误,因为我们试图将 0-by-0 矩阵强制转换为 1-by-1 插槽。 (顺便说一句,你说 size(z) 给你 [1 1]size(z, 3) 也给你 1size(z,7) 等等 所以实际上它是一个 [1 1 1 ... 矩阵)

案例 2:

X(1) = []

这导致 X 使得 size(X)1-by-8,MATLAB如果指定线性索引,似乎很乐意将矩阵线性化。这对我来说很有意义,并且再次与 1-by-1 情况一致,因为它导致 1-by-numel(X)-1 矩阵(即 1-by-0 for X = 1)

案例三:

X(1,:) = []

这很简单,删除第一行,所以现在我们有一个 n-1-by-m 矩阵。所以 3-by-3 变成了 2-by-3 所以我很高兴 在这种情况下,code>1-by-1 变成了 0-by-1。请注意,X(:,1) = [] 也以类似的方式保持一致。

案例 4:

X(:) = []

这个才有意义,重新赋值整个矩阵。没有问题。没有歧义。

所以即使是肯定的,它们都可以明确表示同一件事。我认为对于 MATLAB 来说,与对单个元素矩阵总是做同样的事情相比,获得与更大矩阵一致的不同结果是一个完全合理的设计选择。

关于matlab - 1x1 矩阵的第一个元素与 1x1 矩阵的所有元素之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18959702/

相关文章:

c - 如何使用 Simulink 外部模式在 Lego Mindstorms EV3 上发送和接收 UDP 数据包?

c++ - 重载 *= 矩阵运算符 C++

python - 从 np.where 获得的元组的位置处的随机值到矩阵 (np.ndarray)

python - 计算使用另一个数组中的值选择的 numpy 矩阵的行的列均值

r - 解释 psych::cor.smoother 函数

c++ - 将代码从 Matlab 移植到 C++

algorithm - 神经网络 - 求解具有时间数组和不同采样率的网络

matlab - 从 MATLAB Low Performance 调用内核

matlab - 使用Matlab的ocr进行文字识别

c函数,得到一个矩阵,然后对它进行平方