Matlab 从数据集中选择维度的最大值
我有一个Matlab 从数据集中选择维度的最大值,matlab,Matlab,我有一个n-D数据集,我想为维度的最大值选择数据n data\u finale的大小为:172299*11*5,我想找到一种比下面的循环更有效的方法来获取data\u finale(ii,:,5)的最大值。 如果我做对了,你想根据矩阵的维数找到最大值,就像在XxYxZ矩阵中一样,你想沿着X,Y和Z的维数找到最大值。如果是这种情况,为什么不使用具有维度选择性的函数?您已经在使用max查找最大的数字 s = rng(8675309); % set random # gen test = rand(1
n
-D数据集,我想为维度的最大值选择数据n
data\u finale
的大小为:172299*11*5
,我想找到一种比下面的循环更有效的方法来获取data\u finale(ii,:,5)的最大值。
如果我做对了,你想根据矩阵的维数找到最大值,就像在XxYxZ矩阵中一样,你想沿着X,Y和Z的维数找到最大值。如果是这种情况,为什么不使用具有维度选择性的函数?您已经在使用max查找最大的数字
s = rng(8675309); % set random # gen
test = rand(13,4,6)*50; % creates a 3D matrix
[Xm, Xidx] = max(test,[],1) % Finds max across X dim
[Ym, Yidx] = max(test,[],2) % Finds max across Y dim
[Zm, Zidx] = max(test,[],3) % Finds max across Z dim
我一直在看你提供的代码,我试图弄清楚你到底在做什么。代码是正确的吗?我有点困惑,你想从中找出什么
不管怎样
在第5个Z平面上使用max函数生成下面的idx
[~ y]= max(test(:,:,5),[],2)
y =
1
3
1
4
4
4
2
3
2
3
3
3
3
使用您的代码压缩并查找由以下idx生成的单个行的最大值:
for ii=1:size(test,1)
[II JJ(ii)]=max(squeeze(test(ii,:,5))); % Tracking your IDX numbers
data_finale_opt(ii,:)=squeeze(test(ii,JJ(ii),:));
end
JJ = transpose(JJ)
JJ =
1
3
1
4
4
4
2
3
2
3
3
3
3
您的方法和我的方法都生成了相同的IDX值。我们可以从for循环中删除max
函数,留下数据部分。下面的代码显示了我的代码、你的代码和速度
s = rng(8675309); % seed to make same rand values
test = rand(172299,11,5);
%% My code
tic
[~,idx] = max(test(:,:,5),[],2);
data_finale_opt = zeros(size(test,1),size(test,3)); % building container before loop speeds up process as resources don't go into expanding the matrix.
for ii = 1:size(test,1)
data_finale_opt(ii,:)=squeeze(test(ii,idx(ii),:));
end
toc
%% Your code
tic
for ii=1:size(test,1)
[II JJ]=max(squeeze(test(ii,:,5)));
data_finale_opt2(ii,:)=squeeze(test(ii,JJ,:));
clear II JJ
end
toc
Time elapsed for my code: 0.807906 seconds.
Time elapsed for your code: 4.672404 seconds.
如果我做对了,你想根据矩阵的维数找到最大值,就像在XxYxZ矩阵中一样,你想沿着X,Y和Z的维数找到最大值。如果是这种情况,为什么不使用具有维度选择性的函数?您已经在使用max查找最大的数字
s = rng(8675309); % set random # gen
test = rand(13,4,6)*50; % creates a 3D matrix
[Xm, Xidx] = max(test,[],1) % Finds max across X dim
[Ym, Yidx] = max(test,[],2) % Finds max across Y dim
[Zm, Zidx] = max(test,[],3) % Finds max across Z dim
我一直在看你提供的代码,我试图弄清楚你到底在做什么。代码是正确的吗?我有点困惑,你想从中找出什么
不管怎样
在第5个Z平面上使用max函数生成下面的idx
[~ y]= max(test(:,:,5),[],2)
y =
1
3
1
4
4
4
2
3
2
3
3
3
3
使用您的代码压缩并查找由以下idx生成的单个行的最大值:
for ii=1:size(test,1)
[II JJ(ii)]=max(squeeze(test(ii,:,5))); % Tracking your IDX numbers
data_finale_opt(ii,:)=squeeze(test(ii,JJ(ii),:));
end
JJ = transpose(JJ)
JJ =
1
3
1
4
4
4
2
3
2
3
3
3
3
您的方法和我的方法都生成了相同的IDX值。我们可以从for循环中删除max
函数,留下数据部分。下面的代码显示了我的代码、你的代码和速度
s = rng(8675309); % seed to make same rand values
test = rand(172299,11,5);
%% My code
tic
[~,idx] = max(test(:,:,5),[],2);
data_finale_opt = zeros(size(test,1),size(test,3)); % building container before loop speeds up process as resources don't go into expanding the matrix.
for ii = 1:size(test,1)
data_finale_opt(ii,:)=squeeze(test(ii,idx(ii),:));
end
toc
%% Your code
tic
for ii=1:size(test,1)
[II JJ]=max(squeeze(test(ii,:,5)));
data_finale_opt2(ii,:)=squeeze(test(ii,JJ,:));
clear II JJ
end
toc
Time elapsed for my code: 0.807906 seconds.
Time elapsed for your code: 4.672404 seconds.
要提高效率,请删除
清除。要提高效率,请删除清除。