2

我有一个在循环中增加大小的数组。matlab 中的解决方案是使用 x = zeros(1, 9) 预分配零;我的问题是有时数组在数组的开头和结尾会有一些零。这些零是我数据的一部分。当它的大小为 5 时,我需要使用数组,然后当它是 7 时,最后当它有 9 个元素时。如何在不将 em 与预分配零混淆的情况下使用它们?

更新 使用 NAN 是最简单的方法,对我来说效果很好。altho Prashant 发布了一个更复杂的解决方案,可以很好地满足其他要求。(我的功能很简单。)

4

3 回答 3

5

最简单的方法是预先分配给NaN

dataArray = nan(nRows, nColumns)

您也可以确保其余代码跟踪您的索引,但NaNs 非常简单。

于 2012-07-21T03:37:29.053 回答
1

使用变量跟踪大小。
我需要更多地了解你的用法才能给你一个具体的答案,但考虑这样的事情:

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
于 2012-07-21T03:36:11.267 回答
1

您可以通过多种方式初始化矩阵,包括使用 NaN 值,例如x = nan * ones(1, 9);(或您想要开始的任何其他值,如果您替换nan为一个值,具体取决于您计划如何填充它)。

于 2012-07-21T03:36:11.937 回答