我有一个在循环中增加大小的数组。matlab 中的解决方案是使用 x = zeros(1, 9) 预分配零;我的问题是有时数组在数组的开头和结尾会有一些零。这些零是我数据的一部分。当它的大小为 5 时,我需要使用数组,然后当它是 7 时,最后当它有 9 个元素时。如何在不将 em 与预分配零混淆的情况下使用它们?
更新 使用 NAN 是最简单的方法,对我来说效果很好。altho Prashant 发布了一个更复杂的解决方案,可以很好地满足其他要求。(我的功能很简单。)
最简单的方法是预先分配给NaN
dataArray = nan(nRows, nColumns)
您也可以确保其余代码跟踪您的索引,但NaN
s 非常简单。
使用变量跟踪大小。
我需要更多地了解你的用法才能给你一个具体的答案,但考虑这样的事情:
Preallocate max space for mem
While looping over data sets
Set k = 1
While looping over data set elements
Add element to mem(k)
Set k = k + 1
End
Extract the data you want with mem(1:k-1)
Use the extracted data
End
Matlab 喜欢预先分配的数据,因为通常你可以知道你的数据集有多大。
While looping over data sets
Determine size of data set, and preallocate mem here with that size
Set k = 1
While looping over data set elements
Add element to mem(k)
Set k = k + 1
End
mem already has exactly the data you need, so begin using it
End
当然,我们更喜欢向量命令来摆脱循环和计数器变量:
While looping over data sets
Use vector calculation with only the input you need to produce only the output you need
mem already has exactly the data you need, so begin using it
End
您可以通过多种方式初始化矩阵,包括使用 NaN 值,例如x = nan * ones(1, 9);
(或您想要开始的任何其他值,如果您替换nan
为一个值,具体取决于您计划如何填充它)。