的另一個替代方案此目標問題:我正在尋找「X = X1(abs(N(4,:) - N(5,:))> 0.24 * abs(N(5,:)))」
我正在尋找一個代碼,不考慮矩陣N
和M
的列順序。所以,我試圖取代在下面的代碼下面一行:
X = X1(abs(N(4,:)-N(5,:))>0.24*abs(N(5,:)));
結果X
依賴的N
列順序和M
問題:
我的目標是如果abs(N(4,i)-N(5,i)) > 0.24*abs(N(5,i))
N(1:3,i), i=1,2,3,4,5
對應的
M(4,:)
的所有值放入一個單元的一個向量中
X
用於查找
X
實體
N(1:3,:)
是由M(1:3,:)
N(4:5,:)
獨特列向量形成被添加到顯示M
否則。
M = [1007 4044 1007 4044 1007 5002 5002 5002 622 622 1007 1007 1007;
552 300 552 300 552 431 431 431 124 124 552 11 11;
2010 1113 2010 1113 2010 1100 1100 1100 88 88 2010 20 20;
12 25 15 12 30 2 10 55 32 12 7 12 7];
A = [1007 4044 5002 622 1007
552 300 431 124 11
2010 1113 1100 88 20
12 25 2 32 12
15 12 10 12 7
30 55
7 ]
N = [622 1007 1007 4044 5002;
124 11 552 300 431;
88 20 2010 1113 1100;
2 4 -1.1 2.1 -3;
2.01 1 -1 2 -5];
[~,~,idx] = unique(M(1:3,:)','rows','stable')
%// Accumulate elements from the fourth row of M based on the IDs
X1 = accumarray(idx(:),M(4,:).',[],@(x) {x});
%// Use mask corresponding to abs(N(4,i)-N(5,i))>0.24*N(5,i) and
%// filter out some of the cells from the output
X = X1(abs(N(4,:)-N(5,:))>0.24*abs(N(5,:)));
在我的例子: 如果N
和M
正確下令:
X = {[12,7],[2 10 55]}
[12 7]
對應N(1:3,2)
,abs(N(4,2)-N(5,2))>0.24*abs(N(5,2))
[2 10 55]
對應N(1:3,5)
,abs(N(4,5)-N(5,5))>0.24*abs(N(5,5))
可能的解決方案:(給我的真實數據正確的結果)
for i = 1:size(N,2)
N(6,i) = i;
end
for h = 1:size(M,2)
for l = 1:size(N,2)
if M(1:3,h) == N(1:3,l)
M(5,h) = N(6,l);
end
end
end
p = 0;
for i = 1:size(N,2)
if abs(N(4,i)-N(5,i))>0.24*abs(N(5,i))
Mint = M(:,ismember(M(5,:).',i.', 'rows').');
p = p+1;
X{1,p} = Mint(4,:);
end
end
你想創建的M爲N的解決方案,然後進行分析,無論M的:此代碼你對你發佈的數據集越大匹配的解決方案?或者你是否想要一個解決方案,將N和M給出,因爲它似乎對於你提出的顯式問題有解決方案,是否要求可以從任何矩陣M執行此操作的操作,而不管M中值的位置如何N + – bern
@bern:N和M是問題的初始數據。並且該解決方案應適用於任何矩陣M,而不管M或N中的值的位置如何。 – bzak