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... 是否在最后对XY 向量进行零填充,因为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中的矢量化代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在PDF矢量图形中更改Matlab的“ exportgraphics”功能中的字体

Matlab 编码器导致 bsxfun 中的矩阵扩展问题

matlab类中的向量化

将 MATLAB 代码转换为 Python [关闭]

Julia 中的 PyPlot 仅在代码结束时显示绘图

投了一篇文章, 文章中的图用的是MATLAB画的,保存成。jpg格式了,审稿人说,让画成矢量图,并保存成。eps