我在Matlab中解析數據文件來繪製它。我解析的數據有3列:用parfor填充地圖
category | x | y
該文件可能有任何類別的幾個點。爲了將它們組合在一起並獲得正確的圖例,我需要對數據進行排序,以便每個類別生成一個n x 2
矩陣,它表示給定類別中的n
點。
在下面的摘錄中,不用擔心解析,而是重要的部分是如何添加地圖。 category
是關鍵,而newVal
是單個x-y對值,需要連接到該點的矩陣。
disp('Sorting categories...')
map = containers.Map();
for i = 2:size(data,2)
str = strsplit(data{i}, '\t');
category = strsplit(str{1}, '.');
category = category{1};
newVal=sscanf([str{2} ',' str{3}],'%f,%f')';
%Interesting stuff starts here
if(isKey(map, category))
mapVal = [map(category); newVal];
else
mapVal = newVal;
end
map = [map; containers.Map(category, mapVal)];
end
這需要有59K點的時間太長了,我真的想給for
變成parfor
。我的過程需要在map
變量上進行讀 - 修改 - 寫操作,這是行不通的。我想代碼做這樣的事情,而不是(假設它會更快,這可能不是真的反正):
disp('Sorting categories...')
map = containers.Map();
for i = 2:size(data,2)
str = strsplit(data{i}, '\t');
category = strsplit(str{1}, '.');
category = category{1};
newVal=sscanf([str{2} ',' str{3}],'%f,%f')';
maps{i} = containers.Map(category, mapVal);
end
map = [maps{:}];
然而,在Matlab串聯地圖導致被覆蓋,而不是附加價值。這將導致每個類別僅保留該類別的最後解析點。有沒有辦法避免這種行爲?
我認爲使用'map(category)= mapVal;'代替'map = [map; containers.Map(category,mapVal)];'在你提供的第一個代碼中。 – Marcin 2014-10-02 23:37:22
@Marcin是的,現在你提到它了,是不是我認爲大聲笑 – Suedocode 2014-10-03 16:24:45