如果我们写,例如:
x = int8.empty(0,5)
whos x
输出:
% Name Size Bytes Class Attributes
% x 0x5 0 int8
因此,我们获得了类int8
的0x5
空数组。
如果内存大小为0字节,那么预分配包含非null维度的空数组的目的是什么?
在这种情况下
x = int8.empty(0,5)
比更有用
x = int8.empty(0,0)
CCD_ 4是否仍然预分配5〃;槽";记忆?
我已经运行了一个0-by-n向量的实际用例:使用Matlab的新声明性属性和参数约束,您可以说这样的话:;x必须是N×;或";z必须是n-by-3";通过将其声明为(:,1(或(:,3(。这允许您以一致的方式表示空集。
这样做也有形式上的原因:一个函数或操作可以根据其输入的维度来定义,例如";取一个m-by-n数组并返回一个k-by-n数组,其中k=somefunction(m或其值(";,在k为零的退化情况下,具有一些非零维度的空数组允许这样的操作,这些操作仍然严格遵守它们的约定。
实际上,对于级联等基本操作,所有空数组通常都是可互换的,并且通常只起作用,或者最多会产生警告。
我能想到的最简单的答案是连续性,这样,如果某个东西需要零行或零列,我的代码就不必编写特殊情况。考虑一下这个有点傻的函数:
function out = getAllRowsGt5(someMatrix)
rowIdxs = find(sum(someMatrix, 2) > 5);
out = zeros(numel(rowIdxs), size(someMatrix, 2));
for idx = 1:numel(rowIdxs)
out(idx,:) = someMatrix(rowIdxs(idx), :);
end
end
当然,在MATLAB中有更简单的实现方法。但关键是,我想根据输入中的值来预分配结果。该代码具有明确的发布条件:
size(out, 2) == size(someMatrix, 2)
没有什么能与我的情况相匹配的特殊情况。如果MATLAB允许对空数组的形状进行限制,这两种情况都不成立。