2011-01-21 29 views
5

Bu kolay olmalı, ancak uzman değilim ve google yardımcı olmuyor.Matlab: Standart temel vektörlerini almanın kolay yolu?

Matlab'da n boyutlu bir alan için standart sıralı temel vektörleri üretmek için zarif bir yol istiyorum. aşağıdakine benzer bir örnek, davranışı için:

>> [e1, e2] = SOB(2); 
>> e1 

    e1 = 1  0 

>> e2 

    e2 = 0  1 

Ben 1-astar için umut değilim ve gerçekten bu kadar basit bir şey için bir fonksiyon yazmak istemiyorum.

Teşekkürler

cevap

17

Neden

A = eye(N); 

sonra A(:,i) sizin i'ninci taban vektörü

4

İki satır düzgün olur mu? EYE ile kimlik matrisini oluşturun, vektörleri MAT2CELL kullanarak bir hücre dizisine kopyalayın, ardından bunları DEAL ile dağıtın.

tmp = mat2cell(eye(N),N,ones(N,1)); 
[e1,e2,...,eN] = deal(tmp{:}) 
+0

2 satır işe yarayabilir ... (bana göre) oldukça şifreli :) – des4maisons

+0

@ des4maisons: Açıklığa kavuşturmak için biraz düzenledim. Temel olarak, temel vektörleri bir diziye birleştirirseniz, kimliği alırsınız. Bu yüzden kimlik matrisini yapıyorum ve parçalara ayıracağım. – Jonas

+0

Yah, Bunu yapmanın bir yolu olduğunu düşündüm, nasıl olduğunu bilmiyordum, teşekkürler. Ayrıca, mat2cell ile bağlantı kurmak mı, yoksa num2cell'i mi kullanmak istiyorsunuz? – des4maisons

0

, daha rahat anonim fonksiyon ise olduğunu.

e = @(x) eye(size(A))(:,x); 

A'nın boyutu 6 x 6 ise, bu 1'e 6'yı 1 döndürür. Bir tek baz vektörünün elde edilmesi için

e(1) = [1;0;0;0;0;0] 
+0

'' Hata:() -enxing bir indeks ifadesinde son görünmelidir. '' – User1291

+0

@ User1291 Matrisi' A' tanımladınız mı? – MiaeKim

+0

farketmez. Boyutu sabitse (örneğin, göz (5) (:, 3) '') – User1291

1

, N boyutta k inci standart baz vektörü, kullanabilirsiniz ki:

yourbasisvector = double(1:N == k) 

1:N vektör 1 2 ... N, == k öğeye üretir k ile eşitlik testleri; double mantıksal değerleri sayılara dönüştürür.

İlgili konular