2015-04-06 38 views
0

我在Matlab中有兩個數組。在Matlab中將數組的某個部分切片到一個新數組中

X = dim(700, 1000) 

Y = dim(1, 1000) 

Y中的值而變化9之間0至我想找到ý其值爲一定值i的指數,和在X.

例如複製的相應值,

[a,b] = find(Y == 5) 

比方說,有20個細胞,其價值在Y.爲5然後A和b會是什麼樣子,a = [1,1,1,1,1, .... 1](因爲只有一列),並b = [2, 3, 10, 15 .... ]

現在我想採取X(:, b's value)。在MATLAB中編寫這段代碼的有效方式是什麼?我能想到的一個簡單的方式是:

for i in size(b) 
     X' = [X', X(:, b)] 

回答

1

如果我正確地解釋你的問題,你要採取的X由那些對應的位置在Y劃定某些列,構建一個新的矩陣,從這些位置樣本在Y。所有你需要做的是:

​​

Y == ind是一個邏輯向量,其中0不滿足您正在搜索的條件,並滿足1你正在尋找的條件。例如,如果Y是:

Y = [5 5 4 4 3 5 2 1] 

Y == 5會給:

[1 1 0 0 0 1 0 0] 

您可以使用邏輯索引,以切成一個數組或矩陣,並提取出你想要的東西。因此,如果你這樣做:

X(:, Y == 5); 

這意味着,我們希望在2列1和6把解壓出來的所有行。因此,你會解壓出來的三列矩陣,從2列1樣本並從X 6。

因此,如果我正確理解您的問題,您希望從X中提取出列,其中Y中的相應位置需要符合某些標準。最有效的方式就是我在這篇文章開頭概述的內容。


希望這有助於!祝你好運!

0

看起來你只需要得到Y的排序索引,並使用這些索引來索引X以獲得預期的輸出。下面的代碼 -

[~,idx] = sort(Y) 
X_out = X(:,idx) 

用於解釋

一採樣運行隨機輸入,X和Y -

X = 
    0.2967 0.2625 0.4886 0.5468 0.6791 0.8852 0.3354 
    0.3188 0.8010 0.5785 0.5211 0.3955 0.9133 0.6797 
    0.4242 0.0292 0.2373 0.2316 0.3674 0.7962 0.1366 
    0.5079 0.9289 0.4588 0.4889 0.9880 0.0987 0.7212 
    0.0855 0.7303 0.9631 0.6241 0.0377 0.2619 0.1068 
Y = 
    1  4  2  3  4  5  2 

二。爲Y已排序索引將是 -

idx = 
    1  3  7  4  2  5  6 

這些列索引(IDX)將用於從X.

  • 提取特定列由於Y==1是用於第一索引中Y,第一輸出的列將是X(:,1)

  • 由於Y==2是用於Y第三&第七指數,從X第三和第七列,即X(:,3) & X(:,7)將附加 到輸出陣列。

該追加過程將繼續下去,直到我們在Y與各項指標完成,從而使我們的最終輸出作爲未來上市 -

out = 
    0.2967 0.4886 0.3354 0.5468 0.2625 0.6791 0.8852 
    0.3188 0.5785 0.6797 0.5211 0.8010 0.3955 0.9133 
    0.4242 0.2373 0.1366 0.2316 0.0292 0.3674 0.7962 
    0.5079 0.4588 0.7212 0.4889 0.9289 0.9880 0.0987 
    0.0855 0.9631 0.1068 0.6241 0.7303 0.0377 0.2619 
相關問題