Lea*_*ner 24 arrays matlab matrix
对于向量V的大小为nx 1,我想创建二进制指示符矩阵中号的大小为nx最大(V) ,使得所述行条目中号具有1中的相应的列的索引,0否则.
例如:如果V是
V = [ 3
2
1
4]
Run Code Online (Sandbox Code Playgroud)
指标矩阵应该是
M= [ 0 0 1 0
0 1 0 0
1 0 0 0
0 0 0 1]
Run Code Online (Sandbox Code Playgroud)
小智 30
像这样的指标矩阵的事情是,如果你使它稀疏是更好的.无论如何,你几乎总是在做矩阵乘法,所以要使它成倍增加.
n = 4;
V = [3;2;1;4];
M = sparse(V,1:n,1,n,n);
M =
(3,1) 1
(2,2) 1
(1,3) 1
(4,4) 1
Run Code Online (Sandbox Code Playgroud)
如果你坚持M是一个完整的矩阵,那么通过使用full来实现它是很简单的.
full(M)
ans =
0 0 1 0
0 1 0 0
1 0 0 0
0 0 0 1
Run Code Online (Sandbox Code Playgroud)
了解如何使用稀疏矩阵.这样做会让你获益匪浅.不可否认,对于4x4矩阵,稀疏不会获得太大的收益.但是示例案例绝不是您真正的问题.假设n真的是2000?
n = 2000;
V = randperm(n);
M = sparse(V,1:n,1,n,n);
FM = full(M);
whos FM M
Name Size Bytes Class Attributes
FM 2000x2000 32000000 double
M 2000x2000 48008 double sparse
Run Code Online (Sandbox Code Playgroud)
稀疏矩阵不仅仅在使用的内存方面获得.比较单个矩阵乘法所需的时间.
A = magic(2000);
tic,B = A*M;toc
Elapsed time is 0.012803 seconds.
tic,B = A*FM;toc
Elapsed time is 0.560671 seconds.
Run Code Online (Sandbox Code Playgroud)
小智 7
一个快速的方法 - 如果你不需要稀疏矩阵 - 是创建一个大小至少为max(v)的单位矩阵,然后通过从v中提取索引来创建指标矩阵:
m = max(V);
I = eye(m);
V = I(V, :);
Run Code Online (Sandbox Code Playgroud)