matlab 什么情况下需要使用'empty'方法?“空”方法有什么好处?

ttvkxqim  于 8个月前  发布在  Matlab
关注(0)|答案(1)|浏览(140)

方法empty创建一个空数组。什么情况下需要使用empty方法?empty方法有什么好处?它会通过preallocation提高效率吗?它们对用户有不同的影响吗?
输入:

A = ColorInRGB.empty(1,0);
B = ColorInRGB1();

A是1x 0 ColorInRGBmemorysize=0
B是1x 1 ColorInRGBmemorysize=0

AB有什么区别?空的1x 0和空的1x 1有什么区别?或者5x 0和1x 1空之间有什么区别吗?如果没有区别,为什么我们使用empty方法?
ColorInRGB.m

classdef ColorInRGB
   properties
      Color (1,3) = [1,0,0];
   end
   methods
      function obj = ColorInRGB(c)
         if nargin > 0
            obj.Color = c;
         end
      end
   end
end

ColorInRGB1.m

classdef ColorInRGB1
    properties
        Color; % (1,3) = [1,0,0];
    end
    methods
%         function obj = ColorInRGB(c)
%             if nargin > 0
%                 obj.Color = c;
%             end
%         end
    end
end

2023/08/27 12:59这两个班级是不同的。我的问题是,ColorInRGB 1()可以帮助我获得一个空数组,那么为什么我们仍然需要一个“空方法”?一旦我知道了它们之间的区别,我就可以理解什么时候在什么场景下使用ColorInRGB 1(),什么时候使用ColorInRGB.empty(1,0);在另一些方面。

aij0ehis

aij0ehis1#

B是一个1x 1的对象数组,它的唯一字段是一个空数组。A是一个1x 0的对象,它没有元素。
B不是空数组,但它包含一个空数组。A是空数组。
我理解为什么区别不是直接明显的。两者都不包含任何数据(这是工作区资源管理器和whos命令报告的“内存大小”,其中不包括对象本身的开销)。但有明显的区别:

  • isempty测试对A成立,但对B不成立。
  • 我们可以索引到BB(1)有效,A(1)无效。B.Color是有效的,赋值B.Color = 'foo'也是有效的;你不能用A做任何事情。

这与空单元阵列{}和包含空阵列的1x 1单元阵列{[]}之间的差异完全相同。
如果你想知道为什么empty可以创建一个1x 0数组,而不是一个0x 0数组,以及为什么我们需要空数组,请参阅this questionthis other one

相关问题