如何在matlab中用另一个矢量作为参数绘制一个矢量?

oxf4rvwz  于 2023-01-26  发布在  Matlab
关注(0)|答案(1)|浏览(168)

我正在尝试优化我正在编写的函数的速度,并尝试尽可能多地使用向量。我是Matlab的新手,向量化有时对我来说是可以理解的,但我希望得到一些额外的帮助。以下是我目前的代码:
需要注意的是,oracle()函数表示一个随机形状的对象,如果输入一个1x 2矩阵,它将返回矩阵(或者在我们的例子中,x-y坐标)是否在随机对象内部。
Code In Image
函数area = MitchellLitvinov_areaCalc(n)%创建随机坐标向量,其边界为(3,14)x = rand(n,1)* 11 + 3;y =兰德数(n,1)* 11 + 3;

% find every point that is inside of oracle
inOracle = oracle([x y]);

% calculate the proportion, and multiply total area by proportion to find area
% of oracle
numPointsInOracle = nnz(inOracle);
area = numPointsInOracle/n * (11*11);

% create variable to store number of points in the area, and create a
% matrix with size [numPoints, 2] to hold x and y values
oracleCoordinates = zeros(numPointsInOracle, 2);

% HERE IS WHERE I NEED ASSISTANCE!!!!!!!!!
% find the points that are in the oracle shape
index = 0; % start index at 0 % is the index of our oracleCoordinates matrix
for i = 1:n % have to go through every point again to get their index

    % if point is inside oracle, increase index and record
    % coordinates
    if (inOracle(i) == 1) % see if point is in oracle
        index = index + 1; 
        oracleCoordinates(index, 1) = x(i, 1);
        oracleCoordinates(index, 2) = y(i, 1);
    end
end

% plot all points inside the oracle
scatter(oracleCoordinates(:,1), oracleCoordinates(:,2))
title("Oracle Shape")
xlim([3, 14]);
ylim([3, 14]);

结束
是的,即使使用接近最大的内存使用,代码也会运行得相当快。但是我希望它完全矢量化,这仅仅是出于速度的原因,如果我需要重新使用这个代码来进行成像。目前,为了计算我使用矢量的区域,但为了实际再现图像,我需要创建一个单独的存储矩阵,然后手动使用索引/附加来传输oracle函数内部的点。我想知道是否有任何直接的“快捷方式”可以让我的绘图速度快一点。

n6lpvg4x

n6lpvg4x1#

您可以使用数组作为索引,从另一个数组中选择某些项。例如,使用变量名:

oracleCoordinates(:,1) = x(inOracle == 1);
oracleCoordinates(:,2) = y(inOracle == 1);

这应该会给予与问题中的代码相同的结果,而不使用循环。

相关问题