gpt4 book ai didi

matlab - 在 Matlab 中,获取结构中的字段值

转载 作者:行者123 更新时间:2023-12-02 07:35:16 25 4
gpt4 key购买 nike

很抱歉,如果这个问题之前已经被问过,找不到搜索。我有一个结构数组(大约 1000 个)。每个结构都有一个名为“travelTime”的字段,它是一个大小为“120x92x150”的 3D 矩阵。我需要查找所有 1000 个矩阵的某个位置的值,例如。 index (60,46,75) 所以我会有一个包含 1000 个元素的数组。我可以在 for 循环中执行此操作,但是否有更简单、更优雅(更快)的方法?

谢谢,卡姆兰

最佳答案

沿第四个维度连接所有内容,检索所有索引,然后将结果压缩 返回到列向量中。例如,如果您的结构数组是 S,您可以这样做:

A = cat(4, S.travelTime);
points = squeeze(A(60, 46, 75, :));

基准测试

让我们对可能的解决方案进行基准测试:

M = reshape(1:18, 2, 3, 3);
for k = 1:100
s(k).travelTime = mod(k, 6) * M;
end

tries = 1e4;

%// Vectorized solution
tic
for jj = 1:tries
A = cat(4, s.travelTime);
points = squeeze(A(1, 2, 1, :));
end
toc

%// For loop solution
tic
for jj = 1:tries
points = zeros(size(s));
for ii = 1:numel(s)
points(ii) = s(ii).travelTime(1, 2, 1);
end
end
toc

%// arrayfun solution
tic
for jj = 1:tries
Points = arrayfun(@(ii)s(ii).travelTime(1, 2, 1), 1:numel(s));
end
toc

结果是:

Elapsed time is 0.072367 seconds.
Elapsed time is 0.890323 seconds.
Elapsed time is 1.08522 seconds.

毫不奇怪,矢量化解决方案最快,arrayfun 解决方案最慢。

关于matlab - 在 Matlab 中,获取结构中的字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209783/

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