matlab - 为什么空数组可以有非空维度?

标签 matlab pre-allocation

如果我们写,例如:

x = int8.empty(0,5)

whos x 输出:

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

因此,我们得到了一个 0x5int8 的空数组。

如果内存大小为 0 字节,预分配包含非空维度的空数组的目的是什么?

在什么情况下

x = int8.empty(0,5)

更有用
x = int8.empty(0,0)

int8.empty(0,5) 是否仍预分配 5 个“槽”内存?

最佳答案

我遇到了一个 0×n 向量的实际用例:使用 Matlab 的新声明性属性和参数约束,您可以说“x 必须是 N×1”或“z 必须b n×3”,将其声明为 (:,1) 或 (:,3)。这允许您以一致的方式表示空集。

这样做还有形式上的原因:一个函数或操作可以根据其输入的维度来定义,例如“接受一个 m×n 数组并返回一个 k×n 数组,其中 k = somefunction(m or its values)”,并且在 k 为零的退化情况下,具有一些非零维度的空数组允许这样的操作仍然严格遵守它们的契约(Contract)。

实际上,对于连接等基本操作,所有空数组通常是可互换的,通常会正常工作或最多产生警告。

关于matlab - 为什么空数组可以有非空维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351256/

相关文章:

arrays - 如何获取给定范围内大于x的元素?

image - 在Matlab中使用ind2sub后出现莫名其妙的结果

matlab - 增加奈奎斯特图中箭头的大小?

arrays - 你能预先分配一个随机大小的数组吗?

matlab - 如何在 MATLAB 中预分配非数字向量?

matlab - 如何使用audioread读取文件序列,然后将它们合并?

matlab - 当赋值中的索引之间的映射不是单射时的向量化

arrays - NaN 或 Inf 数组预分配

Windows(ReFS、NTFS)文件预分配提示