2014-09-23 139 views
1

我試圖創建一個腳本,從文本文件中讀取數據,並將數據繪製到散點圖。MATLAB細胞數組索引和循環

例如,假設文件名是prices.txt,包含:

Pens 2 4 
Pencils 1.5 3 
Rulers 3 3.5 
Sharpeners 1 3 
Highlighters 3 4 

,其中,列2和3的項目爲兩個不同的賣場價格。

什麼我的腳本應該做的是閱讀的價格,計算(使用其他功能)商店的未來價格,其中x是一個存儲和y是另一個繪製這些價格上的散點圖。這是我知道的一個愚蠢的例子,但它符合描述。

不要着急不多,做計算的其他功能,只是假設它做什麼,它應該。

基本上,我想出了以下內容:

pricesfile = fopen('Prices.txt'); 
prices = textscan(pricesfile, '%s %d d'); 
fclose(pricesfile); 

count = 1; 
while count <= length(prices{1}) 
    for item = constants{1} 
     name = constants{1}{count}; 
     store_A = prices{2}{count}; 
     store_B = prices{3}{count}; 
     (...other function goes here...) 
    end 
end 

這樣做後,我完全被卡住。我想這背後的過程是要經過的每個項目的名稱,並創建分配給該名稱與它的兩個對應的價格作爲項目的載體如矢量:

pens = [2 4] 
pencils = [1.5 3] 

等。然後,我會以某種方式繪製的散點圖中向量中的項目,並將向量的名稱用作標籤。

我也不太清楚如何進行我的代碼或者即使我已經寫了會讓我的解決辦法休息。

請幫助和提前致謝。

回答

2
pricesfile = fopen('Prices.txt'); 
data = textscan(pricesfile, '%s %d d'); 
fclose(pricesfile); 

你在正確的軌道上,但在此之後(通過位兩輪牛車的),你實際上並不需要一個循環:

plot(repmat(data{2},1,2)', repmat(data{3},1,2)', '.') 
legend(data{1}) 

什麼你不想做的就是創建一個名爲變量串後。而是將它們存儲在一個陣列中(這基本上就是你的textscan代碼給你的)。 Matlab非常擅長處理矩陣/數組。

你也可以分裂您price排列起來,例如:

names = prices{1}; 
prices = [data{2:3}]; 

現在你可以像 prices_cents =價格* 100很容易執行的價格計算;

plot(prices_cents(:,[1,1]), prices_cents(:,[2,2])) 
legend(names) 

注意,[1,1]等,以上僅使用索引爲短手要達到什麼repmat呢......

+0

謝謝,我將如何使用我提到先上進行必要的計算其它功能文本文件中的數據? – JavascriptLoser 2014-09-23 12:13:27

+0

@PythonNewb這個編輯解釋了它嗎? – Dan 2014-09-23 12:19:06

+0

我遇到了一個問題,試圖將相同的事情應用於不同大小的單元格陣列(10x3)。做這樣的:[代碼]圖( '' repmat(X {11:20}) 'repmat(X {21:30})',)[代碼] dosent產生正確的結果。 – JavascriptLoser 2014-09-24 12:41:57