将 Matalab 60000x10 数组转换为 60000x1 或 1x60000
Converting a Matalab 60000x10 array to 60000x1 or 1x60000
使用大小为 60000 行 10 列的二维数组
我有如下数组
[0 0 0 0 0 1 0 0 0 0]
[1 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1]
.......
任何行都将只包含一个“1”
我必须将其简化为一个行或列向量,显示我们有 1 的索引。例如,对于上面显示的行,我们必须以
[6,1,10...]
直到第 60,000 个值。
我如何在 Matlab 中不使用循环来做到这一点?
更新:
更有效的方法是使用矩阵乘法:
idx = a * (1:size(a,2)).'
上一个回答:
试试这个:
a=[...
0 0 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1]
[r ,~]=find(a.')
使用 Divakar 的 基准 :
------------------- With FIND
Elapsed time is 1.55641 seconds.
------------------- With MAX
Elapsed time is 0.703054 seconds.
------------------- With MTIMES
Elapsed time is 0.266676 seconds.
你可以使用max
-
[~,idx] = max(a,[],2)
60000 x 10
数组的运行时测试
基准代码-
% Setup input array
a = zeros(60000,10);
idx = randi(size(a,2),1,size(a,1));
a(sub2ind(size(a),1:size(a,1),idx)) = 1;
% Timing code
disp('------------------- With FIND')
tic,for i = 1:500,[r,~]=find(a.');end, toc
disp('------------------- With MAX')
tic,for i = 1:500,[~,idx] = max(a,[],2);end, toc
计时 -
------------------- With FIND
Elapsed time is 4.267364 seconds.
------------------- With MAX
Elapsed time is 1.353760 seconds.
使用大小为 60000 行 10 列的二维数组 我有如下数组
[0 0 0 0 0 1 0 0 0 0]
[1 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1]
.......
任何行都将只包含一个“1”
我必须将其简化为一个行或列向量,显示我们有 1 的索引。例如,对于上面显示的行,我们必须以
[6,1,10...]
直到第 60,000 个值。
我如何在 Matlab 中不使用循环来做到这一点?
更新: 更有效的方法是使用矩阵乘法:
idx = a * (1:size(a,2)).'
上一个回答:
试试这个:
a=[...
0 0 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1]
[r ,~]=find(a.')
使用 Divakar 的 基准 :
------------------- With FIND
Elapsed time is 1.55641 seconds.
------------------- With MAX
Elapsed time is 0.703054 seconds.
------------------- With MTIMES
Elapsed time is 0.266676 seconds.
你可以使用max
-
[~,idx] = max(a,[],2)
60000 x 10
数组的运行时测试
基准代码-
% Setup input array
a = zeros(60000,10);
idx = randi(size(a,2),1,size(a,1));
a(sub2ind(size(a),1:size(a,1),idx)) = 1;
% Timing code
disp('------------------- With FIND')
tic,for i = 1:500,[r,~]=find(a.');end, toc
disp('------------------- With MAX')
tic,for i = 1:500,[~,idx] = max(a,[],2);end, toc
计时 -
------------------- With FIND
Elapsed time is 4.267364 seconds.
------------------- With MAX
Elapsed time is 1.353760 seconds.