Matlab:获取标准基向量的简便方法?

8

这似乎很简单,但我并不是专家,谷歌也没有帮助。

我想要在Matlab中以优雅的方式生成n维空间的标准有序基向量。例如,与以下行为类似:

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

  e1 =    1     0

>> e2

  e2 =    0     1

我希望你能提供一行代码,不想为如此简单的事情编写函数。
谢谢。
4个回答

22

为什么不呢?

A = eye(N); 

那么A(:,i)就是您的第i个基向量。


8

要获取单个基向量,比如在N维空间中的第k个标准基向量,您可以使用以下方法:

yourbasisvector = double(1:N == k)

1:N 产生向量 1 2 ... N,其中 == k 对每个元素进行等于k的测试;double 将逻辑值转换为数字。


1
这太棒了。我已经试图想出或找到像这样的解决方案好几周了。你甚至可以通过执行 double(1:N == [k1, k2, k3]') 来扩展这种方法,以一次获取多个身份向量。 - Mark Rucker

5

两行可以吗?使用EYE创建单位矩阵,使用MAT2CELL将向量复制到单元数组中,然后使用DEAL分配它们。

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

两行代码可能可以解决这个问题...虽然对我来说有点晦涩 :) - des4maisons
@des4maisons: 我稍微编辑了一下以澄清。基本上,如果你将基向量组合成一个数组,你会得到单位矩阵。因此我构建了单位矩阵然后拆分它。 - Jonas
是的,我想到了这种方法,只是不知道怎么做,所以谢谢。另外,你是指链接到mat2cell,还是使用num2cell? - des4maisons
@des4maisons:哎呀,应该是mat2cell。谢谢指出。 - Jonas

0

如果您使用匿名函数,会更加方便。

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

如果A的大小为6乘以6,则返回一个6乘1的向量。
e(1) = [1;0;0;0;0;0]

Error: ()-indexing must appear last in an index expression. - User1291
@User1291,你有定义矩阵 A 吗? - Miae Kim
如果我硬编码大小(例如“eye(5)(:,3)”),那么我已经得到了该错误。 - User1291

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接