Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从Meshgrid Matlab创建单列阵列_Arrays_Matlab - Fatal编程技术网

Arrays 从Meshgrid Matlab创建单列阵列

Arrays 从Meshgrid Matlab创建单列阵列,arrays,matlab,Arrays,Matlab,我正在编写一个开源代码,它应该有一个一维数组的网格文件。我通过Matlab中的MESHGRID创建网格,然后使用FOR loop按列堆叠数据以创建文件。这需要很长时间,因为循环的时间很长。有谁能给我建议一个更好的算法来解决这个问题,这将加快我的进程。提前谢谢 clear all; clc; close all; th = (0:0.5:360)*pi/180; r = 0:0.2:1; z = 5:.01:15; [TH,R,Z] = meshgrid(th,r,z); [X,Y,Z1] =

我正在编写一个开源代码,它应该有一个一维数组的网格文件。我通过Matlab中的MESHGRID创建网格,然后使用FOR loop按列堆叠数据以创建文件。这需要很长时间,因为循环的时间很长。有谁能给我建议一个更好的算法来解决这个问题,这将加快我的进程。提前谢谢

clear all;
clc;
close all;

th = (0:0.5:360)*pi/180;
r = 0:0.2:1;
z = 5:.01:15;
[TH,R,Z] = meshgrid(th,r,z);
[X,Y,Z1] = pol2cart(TH,R,Z);




L1 = length(X(:,1,1))
L2 = length(Y(1,:,1))
L3 = length(Z1(1,1,:))

T = 1;

for i = 1:1:L1

    for j = 1:1:L2

        for k = 1:1:L3

         M(T,1) = X(i,j,k) ;
         M(T,2) = Y(i,j,k) ;
         M(T,3) = Z1(i,j,k) ; 
         T = T+1

       end


     end

 end



  dlmwrite('hpts.in',M,'precision','%2.2f','delimiter',' ','-append');
这不仅仅是:

M = [X(:), Y(:), Z1(:)]
虽然从技术上讲,要得到相同的结果,您首先要沿着第三维度进行计数,因为Matlab和
(:)
技术是以列为主的,也就是说,首先沿着维度1进行计算,所以您需要重新排列维度,所以使用
排列
,或者
(:)
或者
重塑
。使用
重塑
您可以使用匿名函数来整理:

columize = @(A)reshape(permute(A, [3,2,1]), [],1,1)
M = [columize(X), columize(Y), columize(Z1)]

侵入
pol2cart.m
并使用自定义版本的
meshgrid
使用此代码实现所需的结果-

%// Inputs
th = (0:0.5:360)*pi/180;
r = 0:0.2:1;
z = 5:.01:15;

%// Start processing
Mcol1 = cos(th)'*r;                      %//'
Mcol1 = repmat(Mcol1(:).',numel(z),1);   %//'

Mcol2 = sin(th)'*r;                      %//'
Mcol2 = repmat(Mcol2(:).',numel(z),1);   %//'

M = [Mcol1(:) Mcol2(:) repmat(z(:),numel(r)*numel(th),1)];

dlmwrite('hpts.in',M,'precision','%2.2f','delimiter',' ','-append');
这似乎比您在我的系统上通过预分配
M
获得的代码快约
6x


此外,您可以将
th
的转置存储到变量中,并在使用这些转置值的两个位置使用它-
cos(th)
sin(th)
,因此必须进一步加速。

作为第一步,预先分配
M
;此外,您还可以检查这是否适用于您:
M(:,1)=X(:)