2017-10-24 110 views
6

fonksiyonu uygulamak "veya" veya dahil etmek isteyen (veya herhangi) bağımsız değişken (mantıksal vektörler) sayısı ikiden fazla olabilir geçirilen bir işlev içinde ve sayı olarak değişebilir. Örneğin, ebeveyn işleviikiden fazla vektörlere Matlab

a=[1;0;0;0] 
b=[0;1;0;0] 
c=[0;0;0;1] 

yaratabilir ama bir dahaki sefere

d=[0;0;1;0] 

bunu nasıl elde edersiniz, bu durumda, bana X = [1 vermek ekleyebilir; 1; 0 1) ilk kez ve Y = [1; 1; 1; 1] ikinci kez mi? içeri geçirilen kaç vektörler tanıyabilmek gerekir böylece vektörlerin sayısı yirmi kadar olabilir

cevap

9

Bu bunu yapmak görecektir:.

function y = f(varargin) 
y = any([varargin{:}], 2); 

varargin bir hücre dizisidir işlev giriş argümanlarıyla. {:} yatay bunları birleştirir bir bu argümanlar comma-separated list ve [...] (veya horzcat) oluşturur. Şimdi bir sütunda her bir vektör ile bir matrisimiz var. İkinci boyut boyunca any uygulanarak istenen sonuç elde edilir. fonksiyonu tek bir deyimi içerdiğinden

aynı zamanda bir anonymous function olarak tanımlayabiliriz:

f = @(varargin) any([varargin{:}], 2); 

Örnek çalıştırır:

>> f([1; 1; 0; 0], [1; 0; 0; 1]) 
ans = 
    4×1 logical array 
    1 
    1 
    0 
    1 

>> f([1; 1; 0; 0], [1; 0; 0; 1], [0; 0; 1; 0]) 
ans = 
    4×1 logical array 
    1 
    1 
    1 
    1 
2

Ben zaten bu düşünce eminim:

a=[1;0;0;0] 
b=[0;1;0;0] 
c=[0;0;0;1] 
a|b|c % returns [1;1;0;1] 

Ancak bu çok daha basit bir cevap var:

any([a,b,c,d],2); 

sadece any işlevine girmeden önce yukarıdaki gibi değişkenleri birleştirerek kolayca genişletilebilir.

function customOr(varargin) 
    any(cell2mat(varargin),2) % equivalent to any([varargin{:}],2); 
end 
customOr(a,b,c) % returns [1;1;0;1] 
customOr(a,b,c,d) % returns [1;1;1;1] 
: Bir fonksiyonun içine koymak istiyorsanız burada yapmanın yolu bu