Matlab中的矢量化代码
Posted
技术标签:
【中文标题】Matlab中的矢量化代码【英文标题】:vectorizing code in Matlab 【发布时间】:2012-02-21 21:00:19 【问题描述】:我有一个 ASCII 文件,其中包含在地震解释软件中创建的多个表面。它们是顶面和底面之间的插值曲面族 是一个族 所有曲面都在规则方形网格的每个点处进行采样。 文件结构为: X Y Z1 Z2.....锌 其中 X、Y 是所有曲面共有的坐标向量,Z1、Z2、...、Zn 是曲面。 我想在 Matlab 中导入文件并将每个单独的表面保存到自己的文件 XYZ 中。
假设数据被导入并存储在变量“data”中,这段代码完成了这项工作:
r=size(data,1);
c=size(data,2)-2;
temp(:,1)=data(:,1);
temp(:,2)=data(:,2);
for i = 1:c
temp(:,3)=data(:,i+2);
tempname = ['proportional_',num2str(i*5-5),'ms','.txt']; % naming reflects the
% fact that surfaces
% are in two way travel
% time and that median
% distance between each
% two surfaces is ~ 5
% milliseconds
save (tempname,'temp','-ASCII','-TABS');
end
clear r c temp tempname i
clc
我想通过将尽可能多的代码从 for 循环中取出来对这段代码进行矢量化处理。我认为为 save 命令执行此操作可能是不可能的,但也许其他两行可以。我的感觉是我应该使用元胞数组或结构,但我想不出正确的语法。 有任何想法吗?谢谢
【问题讨论】:
如果你有一个 n-D 数组,data
格式为:X Y Z1 Z2...
是否在最后对X
和Y
向量进行零填充,因为Z*
将始终具有@987654327 @值?
我不确定我是否理解这个问题。 data 是一个二维数组,其中 X、Y、Z1、....、Zn 中的每一个都是一列
【参考方案1】:
你可以这样做:
temp = arrayfun( @(x) data(:,[1 2 x]), 3:size(data,2), 'UniformOutput',0 );
arrayfun( @(x) dlmwrite( strcat('proportional_',num2str(x*5-5),'ms.txt'), ...
tempx, '\t' ), 1:numel(temp) );
【讨论】:
我会尽快尝试(并尝试理解它)。会回来的。谢谢! 约扎。 +1 为……嗯……某事。以上是关于Matlab中的矢量化代码的主要内容,如果未能解决你的问题,请参考以下文章