2014-03-27 30 views
0

我有來自不同實驗的數據,堆積在列中。其中一列是實驗編號,另一列是我應該分析的數據。帶有嵌套切片的matlab矢量索引

從數據到分析我只需要一部分,對於單個實驗我知道一個索引,我應該從哪裏開始,在哪裏完成。如果我的數據用於分析,我想創建一個邏輯向量。

作爲一個例子:

a = [8 8 8 6 6 6 8 8 8 8 8 5 5 5 5 8 8 ]'; 
b = [2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3]'; 

是矢量a與數據I需要,b是實驗次數。 我需要完成:

logicalINeed = [0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 ]; 
dataFroAnalysis = a(logicalINeed==1)' 

這給出了一個輸出:

dataFroAnalysis = 

    6  6  6  5  5  5  5 

我知道每個實驗而不是完全疊列索引:

b2_lower = 3; % index where analysis should start 
b2_upper = 5; % index where analysis should end 
b3_lower = 4; 
b3_upper = 7; 

我想簡單地創建零,如果在範圍內則更改爲1

c = zeros([length(a),1]); 
c(b==2(b2_lower:b2_upper)) = 1; 
c(b==3(b3_lower:b3_upper)) = 1; 

顯然這不起作用,因爲它應該。我嘗試實現循環,但完成了很多計數器並且完全沒有效率。原始數據超過100.000個條目,進行500次不同的實驗。

有沒有簡單的索引方式來做到這一點?

回答

1

我想先看看你是如何創建這些ab載體的 - 在早期階段沒有什麼可以做,以便以後處理更容易?你從哪裏獲得指數值?

假設你不能改變你的數據格式,而且在b數字是連續的塊:

[c, ia, ic ] = unique(b); 

默認情況下ia包含每個唯一值的第一位置(每個實驗即開始組)。因此,你可以工作,你的索引值偏移:

boffset = ia-1; 

boffest(n)是對與實驗c(n)指數所抵消。

根據您存儲的索引值的方式,然後可以使用該偏移量計算出這些值在整列中的位置。

0

不知道我完全明白你在問什麼,但這裏有一些可能有用的東西。

首先,你可以做索引與邏輯表達式,像這樣:

dataFroAnalysis = a(a~=8) 

dataFroAnalysis = 

    6  6  6  5  5  5  5 

其次,你可能會發現在「查找」命令的有用的「聯盟」或「相交」一起:

index_where_5 = find(a==5); 
index_where_6 = find(a==6); 

index_where_5_or_6 = union(index_where_6, index_where_5); 

dataFroAnalysis = a(index_where_5_or_6) 

dataFroAnalysis = 

    6  6  6  5  5  5  5 
+0

謝謝。我給矢量一個例子的目的,只是爲了簡單,它有這三個值。我的目標是僅基於向量b和索引bn_lower,bn_upper上的值來獲取邏輯向量。在原始問題中,我無法對a的值進行索引。 – tomasz74