Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 Matlab如何加速阵列访问_Arrays_Performance_Matlab_Optimization - Fatal编程技术网

Arrays Matlab如何加速阵列访问

Arrays Matlab如何加速阵列访问,arrays,performance,matlab,optimization,Arrays,Performance,Matlab,Optimization,我正在运行一个模拟程序,根据几何图形跟踪单个点的位移~1000-100000。当计算下一个时间步长加速度时,我需要访问当前位移。 数据保存在一个非常大的二维阵列1000x2中,并通过以下行进行访问: eta = U2(connect(2:neib+1,i),:) - onearray*U2(i,:); U2是置换数组,connect是填充整数的二维数组61x1000。该行针对每个点运行,是瓶颈,占用了约33%的总计算时间 所以我的问题是我怎样才能加快这条线路?我猜速度慢与访问阵列中的这么多点有

我正在运行一个模拟程序,根据几何图形跟踪单个点的位移~1000-100000。当计算下一个时间步长加速度时,我需要访问当前位移。 数据保存在一个非常大的二维阵列1000x2中,并通过以下行进行访问:

eta = U2(connect(2:neib+1,i),:) - onearray*U2(i,:);
U2是置换数组,connect是填充整数的二维数组61x1000。该行针对每个点运行,是瓶颈,占用了约33%的总计算时间

所以我的问题是我怎样才能加快这条线路?我猜速度慢与访问阵列中的这么多点有关,所以有没有办法减少访问时间


编辑:neib是9到61之间的整数,用于跟踪connect中的非零行。i是迭代次数,从1到点数。Onearray=onesneib,1预先分配以减少时间

下面是围绕它的整个循环:

for ii=1:nnodes     % #for each node (nodes are points)
    neib = connect(1,ii);
    onearray = ones(neib,1);
    eta= U2(connect(2:neib+1,ii),:) - onearray*U2(ii,:);   % #calculates stretch of bonds and subtracts stretch of node
    if eta == 0
        continue
    end
    xi=xiall(2:neib+1,:,ii);    % #gets vector distance for all horpts for node 'i' (2:total # of horpts+1,all,node)
    od=odall(2:neib+1,ii);     % #gets magnitude for all horpts for node 'i' (2:total # of horpts+1,all,node)

    cp=xi+eta;  % #adds stretch to (x-x') (cp is the current relative position vector from node to each bond)
    cd = sqrt(cp(:,1).^2 + cp(:,2).^2); % #cd (vector) is the new radii from node to horpts
    s=cd./od-1;     % #strain (by definition)

    f=C*s./cd*A;    % #calculates unit force density function
    UD(ii,:)=UD(ii,:)+sum([f f].*cp); % #adding force density function to equation of motion

end

你能让我们更深入地了解该行中的参数的用途吗?我不能在不知道它们的用途的情况下提出任何建议。具体来说,什么是neib?还有,我的目的是什么?这是迭代数吗?neib是9到61之间的整数,用于跟踪connect中的非零行。i是迭代次数,从1到点数。Onearray=onesneib,1预先分配以减少时间。因此,如果我正确理解了您的问题,那么当前迭代的结果是否依赖于上一次迭代的任何结果?您知道neib的所有值吗?或者这是在每次迭代时动态计算的?neib的所有值都是事先知道的。此行中的所有内容都是静态的,但onearray的大小除外。事实上,connect1,i的元素是存储neib的地方。你能提供更多围绕这条线的循环吗?我怀疑加速这条线的答案是将整个循环矢量化,或者至少是其中的这一部分。