Jos*_*h.F 0 arrays matlab matrix linear-algebra octave
第一行代码使用"离散标签"创建一些向量,第二行代码创建一个稀疏矩阵,在标签所代表的索引处有一个."eye"会创建一个单位矩阵,但即使向量"a"更长,创建稀疏矩阵的效果仍然有效!?
你能帮我理解发生了什么吗?
octave:4> a = [1 3 5 7 9 2 4 6 8 10]
a =
1 3 5 7 9 2 4 6 8 10
octave:5> eye(10)(a,:)
ans =
Permutation Matrix
1 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
eye(10)(a,:)Octave中的表示法意味着:构建size- 10identity矩阵(eye(10)),然后按照给定的顺序选择其行a(注意,a它用作第一个索引,对应于行,并:作为第二个索引,这意味着"占用所有列").因此,例如,结果的4第th行是7单位矩阵的行,因为包含的4第th个条目.a7
根据这个解释,很明显a只要你想要它,只要它的所有值都是范围内的整数1...... 10(这些是可用的行eye(10)).
请注意,在Matlab中,不允许使用"链式"索引.您必须首先分配eye(10)给变量,然后索引到该变量:
m = eye(10);
m(a,:)
Run Code Online (Sandbox Code Playgroud)
最后,一个次要的"技术"注释:获得的矩阵不是类型logical(Matlab的布尔数据类型),也不是sparse.相反,它是一个full类型的矩阵double.