为什么空数组可以具有非null维度



如果我们写,例如:

x = int8.empty(0,5)

whos x输出:

% Name    Size    Bytes    Class    Attributes
% x       0x5     0        int8     

因此,我们获得了类int80x5空数组。

如果内存大小为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允许对空数组的形状进行限制,这两种情况都不成立。

相关内容

  • 没有找到相关文章

最新更新