Matlab: легкий способ получить стандартные базисные векторы? - PullRequest
6 голосов
/ 21 января 2011

Кажется, что это должно быть легко, но я не эксперт, и Google не помогает.

Я бы хотел элегантный способ в Matlab создавать стандартные упорядоченные базисные векторы для n-мерногопространство.Например, поведение похоже на следующее:

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

  e1 =    1     0

>> e2

  e2 =    0     1

Я надеюсь на 1-строчный и не очень хочу написать функцию для чего-то такого простого.

Спасибо

Ответы [ 4 ]

20 голосов
/ 18 февраля 2012

Почему бы не

A = eye(N); 

, тогда A(:,i) - это ваш i-й базисный вектор

4 голосов
/ 21 января 2011

Было бы хорошо две строки? Создайте матрицу идентичности с помощью EYE , скопируйте векторы в массив ячеек, используя MAT2CELL , а затем распределите их с помощью DEAL .

tmp = mat2cell(eye(N),N,ones(N,1));
[e1,e2,...,eN] = deal(tmp{:})
2 голосов
/ 07 января 2017

Чтобы получить один базисный вектор, скажем, k -й стандартный базисный вектор в N измерениях, вы можете использовать:

yourbasisvector = double(1:N == k)

1:N производитвектор 1 2 ... N, который == k поэлементно проверяет равенство с k;double преобразует логические значения в числа.

0 голосов
/ 07 ноября 2016

если вы используете анонимную функцию, это более удобно.

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

Если размер A равен 6 на 6, это возвращает вектор 6 на 1.

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