gpt4 book ai didi

matlab - MATLAB 中 [] 和 [1x0] 的区别

转载 作者:太空宇宙 更新时间:2023-11-03 19:07:20 25 4
gpt4 key购买 nike

我在 MATLAB 中有一个循环,它使用以下条目填充我工作区(2011b,Windows 7、64 位)中的元胞数组:

my_array = 
[1x219 uint16]
[ 138]
[1x0 uint16] <---- row #3
[1x2 uint16]
[1x0 uint16]
[] <---- row #6
[ 210]
[1x7 uint16]
[1x0 uint16]
[1x4 uint16]
[1x0 uint16]
[ 280]
[]
[]
[ 293]
[ 295]
[1x2 uint16]
[ 298]
[1x0 uint16]
[1x8 uint16]
[1x5 uint16]

请注意,某些条目包含 [] , 如行 #6 , 而其他人持有 [1x0]项目,如行 #3 .

  1. 它们之间有任何区别吗? (除了 MATLAB 以不同方式显示它们的事实)。 MATLAB 在内存中表示它们的方式有何不同?
  2. 如果差异仅在于 MATLAB 内部如何表示它们,为什么程序员应该意识到这种差异? (即为什么要以不同的方式显示它们?)。这是一个(无害的)错误吗?或者知道这些数组的表示方式不同是否有任何好处

最佳答案

大多数情况下(请参阅下面的异常(exception)情况)没有真正的区别。两者都被认为是"empty" ,因为至少有一个维度的大小为 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 行。如果结果只显示 [],您将不知道它是否为空,因为您的行索引为空,或您的列索引为空,或两者兼而有之。

警告...

在某些情况下,定义为 [] 的空矩阵(即其所有维度均为 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)。

关于matlab - MATLAB 中 [] 和 [1x0] 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com