在很多情况下,我已经看到MATLAB将返回空对象,如果你看它们的大小,它们将是1 x 0或0 x 1。 一个例子是以下代码:
img = zeros(256); % Create a square zero image of dimension 256 X 256
regions = detectMSERFeatures(img);
size(regions)
如果你看一下区域的大小,它将是0 X 1.我的问题如下。其中一些问题可能会重叠。
temp = zeros(1,0);
答案 0 :(得分:1)
MATLAB中的数组可以具有零大小的任何维度 - 我猜这最初可能看起来很奇怪,但它们只是像其他任何数组一样。
您可以直接创建它们:
>> a = double.empty(2,0,3,0,2)
a =
Empty array: 2-by-0-by-3-by-0-by-2
或使用其他数组创建功能,例如zeros
,ones
,rand
等。
请注意,从上面可以明显看出,空数组仍然有一个类 - 您可以使用double.empty
,uint8.empty
,logical.empty
等创建它们。用户定义的类也是如此。
拥有这样的数组非常有用,而不仅仅是一个NULL元素。没有它们,你需要花费大量的编程工作来检查你有一个NULL而不是一个数组的边缘情况,并且你将无法区分为NULL的数组,因为它们没有行,而数组这是NULL,因为它们没有列。
此外,它们对初始化数组很有用。例如,假设你有一个数组需要从空开始但后来被填充,你知道它总是有三行但是列数可变。然后,您可以将其初始化为double.empty(3,0)
,并且您知道您的初始值将始终通过对阵列所具有的行数的任何检查。如果将它初始化为[]
(零归零)或NULL元素,则无效。
最后,您还可以使用与非空数组相同的方式将它们相乘。你可能会感到惊讶:
>> a = double.empty(2,0)
a =
Empty matrix: 2-by-0
>> b = double.empty(0,3)
b =
Empty matrix: 0-by-3
>> a*b
ans =
0 0 0
0 0 0
但是如果你认为它,它只是矩阵乘法的常规规则的逻辑和必要的应用/扩展。
关于它们如何存储在内存中 - 再次,它们就像常规MATLAB数组一样存储。我不记得确切的细节(在mxArray
的文档中查看),但它基本上是一个给出维度的标题(其中一些可能为零),后面是列主要顺序的元素列表(在这种情况下是一个空列表)。