2012-07-21 30 views
2

我有一個在循環中增加大小的數組。在matlab中的解決方案是使用零=零(1,9)預先分配零。 我的問題是,有時數組將在數組的開始和結尾處有一些零。這些零是我的數據的一部分。我需要在數組大小爲5時,稍後使用7時,最後使用9個元素時處理數組。 我如何使用它們而不會將em與預分配零混淆?如何在matlab中的預分配數組中使用零?

UPDATE 使用NAN是最簡單的方法,它對我來說效果很好。雖然Prashant發佈了更復雜的解決方案,可以很好地滿足其他需求。 (我的功能很簡單。)

回答

5

最簡單的方法是將其預分配給NaN

dataArray = nan(nRows, nColumns) 

你也可以確保你的代碼的其餘部分保持你的索引軌道,但NaN s爲非常容易。

+1

如果你想知道哪一個更快,你可以試試'NaN(nrows,ncols)'或'repmat(NaN,nrows,ncols)'。 – rwong 2012-07-21 03:43:34

+1

...肯定NaN(r,c)的意圖更明確。 – 2013-01-11 15:17:05

+0

我同意'nan(nRows,nColumns)'是一個更好,更清晰的答案。更新。 – Pursuit 2013-01-11 16:29:21

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 
+0

感謝您的回答。這似乎很好,但方式複雜,我想要做什麼。也許它可能對更復雜的應用程序更好。 – user1338101 2012-07-21 04:41:00

1

你可以在很多方面初始化矩陣包括NaN值,如x = nan * ones(1, 9);(或任何其他值,如果你用一個值替換nan,這取決於你打算如何填充它)。

相關問題