2012-11-05 20 views
7

MATLAB, A ve B'de iki vektörüm var. B bazı endeksler içeriyor (1'den sonuna kadar). R indeksim var, R (vektör indeksleri aralığında).Matlab'da belirtilen bir dizine en yakın dizin nasıl bulunur?

A = [2 3 6 1 9 7 4 5 8] 
B = [3 4 5 6 7 8] 
R = 5 

: Ben z

Örnek B'de dahil değildir R en yakın sayı (yani indeks) bir fonksiyonu (veya deyimi) A [z] seçmek için, yazmak istiyorum Fonksiyon 3'e dönmelidir, çünkü en yakın indeks 2'dir, çünkü 5-2 < 9-5 ve 2 B'de değildir, yani A [2] = 3; Jacob'ın cevabı artırma

Teşekkür

cevap

0

Lütfen setdiff ve setxor işlevlerinin sonucu sıraladığını unutmayın.

tmpSet = R - setdiff(1:numel(A),B); 
[~,z] = min(abs(tmpSet)); 
z = tmpSet(z); 
Result = A(R-z); 

söz konusu aynı Örnek:

A = [2 3 6 1 9 7 4 5 8] 
B = [3 4 5 6 7 8] 
R = 5 

tmpSet = 5 - {1 2 9} = {4 3 -4} 
z = 2 
z = 3 
Result = A(5-3) = A(2) = 3 

fikirlerinizi için teşekkür ederiz.

6

, burada doğru çözüm:

[result, z] = min(abs(R - setxor(B, 1:numel(A)))) 

Ve durumunda z = 2 ve result = A(2) = 3 verir söyledi.

+1

Yardımlarınız için teşekkür ederiz. Setxor yerine settdiff kullanmanın daha iyi olduğunu düşünüyorum. Kodunuzu aşağıda değiştirdim. Lütfen fikrinizi bana bildirin. – remo

+0

MATLAB 2012 kullanıyorum. Setxor belgelerinde belirtildiği gibi, setxor (A, B) = A-B birleşimi B-A (simetrik fark). Bununla birlikte, bizim durumumuzda B'nin herhangi bir farklılık yaratmadığını düşünüyorum, çünkü B aralığındaki sayıları içerir. – remo

2

Eğer doğru anlarsam, B'de değil, yani excl = A(setxor(B,1:length(A))) numaralı endeksleri bulmak için önce bir dışlama yapabilirdiniz. Daha sonra bu excl(min(abs(R-excl))) gibi minimumu almak kolaydır.

+0

'setxor' kesinlikle doğru yön, ancak sonuç yanlış. 'excl' değerleri değil, A 'indekslerini içermesi gerekiyordu. –

İlgili konular