![](/img/trans.png)
[英]What is an alternative to repmat for creating a 1D array of repeated values?
[英]Why using repmat() for expanding array?
我想使用testread()
將csv文件加載到Matlab,因為其中的數據具有超過200萬條記錄,所以我應該為這些數據預分配數組。
假設我不知道數組的確切長度,MATLAB v6.5的文檔建議我對擴展數組使用repmat()
。 該文檔中的原始文字如下:
“在無法預分配的情況下,請查看是否可以使用repmat函數來增加陣列的大小。repmat會嘗試為擴展的陣列獲取連續的內存塊。”
我真的不知道如何使用repmat進行擴展?
這是否意味着通過估計repmat()
進行預分配的長度的粗略數,然后刪除空元素?
如果是這樣,這與使用zeros()
或cell()
預分配有何不同?
該文檔還說:
當您預先分配一個內存塊以容納除double以外的某種類型的矩陣時,這樣做會提高內存效率,有時使用repmat函數會更快。
下面的語句使用零來預分配uint8的100 x 100矩陣。 為此,它首先創建一個完整的double矩陣,然后將該矩陣轉換為uint8。 這會花費時間並不必要地使用內存。
A = int8(zeros(100));
使用repmat,您只能創建一個double,從而減少了內存需求。
A = repmat(int8(0), 100, 100);
因此,優點是,如果您想要雙精度數以外的數據類型,則可以使用repmat復制非雙精度數據類型。
另請參閱: http : //undocumentedmatlab.com/blog/preallocation-performance ,其中建議:
data1(1000,3000) = 0
代替:
data1 = zeros(1000,3000)
避免初始化其他元素。
對於動態調整大小,可以使用repmat
來使數組的大小簡潔地加倍(一種常見的方法,導致每個元素的攤銷O(1)追加):
data = [0];
i = 1;
while another element
...
if i > numel(data)
data = repmat(data,1,2); % doubles the size of data
end
data(i) = element
i = i + 1;
end
是的,在收集完所有元素之后,您可以調整數組的大小以最后刪除空元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.