2017-01-30 35 views
0

我有3個單元陣列如何從matlab中得到的矩陣檢查每個變量的值?

A=72x1 
B=72x720 
C=72x90 
resultant=A+B+C 
size of resultant=72x64800 

的總和現在,當我找到的行和列指數的最小值,我可以很容易地找到行元素,但我怎麼能找到變量列元素? 例如 對於A,B,CI的dong計算將它們全部加入並得到了來自< 72x(720x90)>的結果或者可以說大小爲< 72x64800的整數矩陣>,然後我找到了結果的最小值行和列索引使用下面的代碼。

[minimumValue,ind]=min(resultant(:)); 
    [row,col]=find(result== minimumValue); 

然後排了14和列了6840價值 .. 現在我可以跟蹤14行所有A,B,C變量很容易,但我怎麼能知道所獲得的柱6480所屬組合A,B,C?

回答

2

而不是使用find,請使用min函數中的ind output。這是的linear index。要做到這一點,你可以使用ind2sub

[r,c] = ind2sub(size(resultant),ind); 

這不是很清楚你是什麼意思resultant = A+B+C因爲你清楚,如果你得到一個更大的陣列(72x64800)之和不等於他們,而另一方面,這不是簡單的連接([A B C]),因爲這會導致72x811陣列。

然而,假設這串聯,你可以做到以下幾點:

% get the 2nd dimension size of all matrices: 
cols = cellfun(@(x) size(x,2),{A,B,C}) 
% create a vector with reapiting matrices names for all their columns: 
mats = repelem(['A' 'B' 'C'],cols); 
% get the relevant matrix for the c column: 
mats(c) 

所以mats(c)將與最小值的矩陣。


編輯:

從您的評論我的理解是你的代碼看起來是這樣的:

% arbitrary data: 
A = rand(72,1); 
B = rand(72,720); 
C = rand(72,90); 
% initializing: 
K = size(B,2); 
N = size(C,2); 
counter = 1; 
resultant = zeros(72,K*N); 
% summing: 
for k = 1:K 
    for n = 1:N 
     resultant(:,counter) = A + B(:,k) + C(:,n); 
     counter = counter+1; 
    end 
end 
% finding the minimum value: 
[minimumValue,ind] = min(resultant(:)) 

,並從你知道你可以做到這一點的回答開始:

[r,c] = ind2sub(size(resultant),ind) 

獲取行和列minimumValueresultant。所以,以同樣的方式,你可以這樣做:

[Ccol,Bcol] = ind2sub([N,K],c) 

其中BcolCcol是分別BC,列,因此:

minimumValue == A(r) + B(r,Bcol) + C(r,Ccol) 

要看看它是如何工作的設想,循環上面填充矩陣M,其值爲counter,並且M的大小爲N -by- K。因爲我們用線性索引填充M,它將以列主要方式填充,因此該行將對應於迭代器n,該列將對應於迭代器k。現在c對應於我們得到了最小值counter,並在中號的行和列counter告訴我們在BC列,所以我們可以再次使用ind2sub獲得的counter位置的下標。當然,我們並不需要創建M,因爲它內部的值只是線性索引本身。

+0

大概64800有事情做與720 * 90 * 1 = 64800 ...但我同意,它仍然遠不清晰的問題是什麼 –

+0

結果實際上是這種形式:'結果= A + B(:, ⅰ)+ C(:,J);其中我= 720和j = 90' –

+0

@summyiaharis請參閱我的編輯的答案 – EBH