gpt4 book ai didi

matlab - 如何在不在 Matlab 中制作副本的情况下提取子矩阵

转载 作者:行者123 更新时间:2023-12-01 14:38:21 25 4
gpt4 key购买 nike

我有一个大矩阵,我需要从一个遍及整个大矩阵的滑动窗口中提取一个小矩阵,但在操作过程中,提取矩阵的内容不会改变,所以我想在不创建新副本的情况下提取子矩阵,而只是充当指向大矩阵一部分的 C 指针。我怎样才能做到这一点?请帮助我,非常感谢:)

最佳答案

我做了一些基准测试来测试不使用显式临时矩阵是否更快,可能不是:

function move_mean(N)
M = randi(100,N);
window_size = [50 50];
dir_time = timeit(@() direct(M,window_size))
tmp_time = timeit(@() with_tmp(M,window_size))
end

function direct(M,window_size)
m = zeros(size(M)./2);
for r = 1:size(M,1)-window_size(1)
for c = 1:size(M,2)-window_size(2)
m(r,c) = mean(mean(M(r:r+window_size(1),c:c+window_size(2))));
end
end
end

function with_tmp(M,window_size)
m = zeros(size(M)./2);
for r = 1:size(M,1)-window_size(1)
for c = 1:size(M,2)-window_size(2)
tmp = M(r:r+window_size(1),c:c+window_size(2));
m(r,c) = mean(mean(tmp));
end
end
end

对于大小为 100*100 的 M:

dir_time =
0.22739
tmp_time =
0.22339

所以看起来使用临时变量只会让您的代码可读,而不是变慢。

关于matlab - 如何在不在 Matlab 中制作副本的情况下提取子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39060149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com