看起来这应该很容易,但我不是专家,谷歌没有帮助。
我想在Matlab中以优雅的方式为n维空间生成标准有序基矢量。例如,行为类似于以下内容:
>> [e1, e2] = SOB(2);
>> e1
e1 = 1 0
>> e2
e2 = 0 1
我希望获得1-liner,并且真的不想为这么简单的东西编写函数。
由于
答案 0 :(得分:20)
为什么不
A = eye(N);
然后A(:,i)
是你的第i个基础向量
答案 1 :(得分:4)
两条线路可以吗?使用EYE创建单位矩阵,使用MAT2CELL将向量复制到单元格数组中,然后使用DEAL进行分发。
tmp = mat2cell(eye(N),N,ones(N,1));
[e1,e2,...,eN] = deal(tmp{:})
答案 2 :(得分:2)
要获取单个基础向量,请说明k
维度中的N
标准基础向量,您可以使用:
yourbasisvector = double(1:N == k)
1:N
生成向量1 2 ... N
,其中== k
元素测试与k
的相等性; double
将逻辑值转换为数字。
答案 3 :(得分:0)
如果你是匿名函数,那就更方便了。
e = @(x) eye(size(A))(:,x);
如果A的大小是6乘6,则返回6乘1矢量。
e(1) = [1;0;0;0;0;0]