matlab - 我如何使用 cellfun 或 arrayfun 来代替这个循环?

标签 matlab matrix vectorization

我在Matlab中实现了以下函数。

function [x y] = cloud(a,b,phi,x0,y0,N)
phi=phi*2*pi/360;
m=ceil(5*N/pi);
x=a*(-1+2*rand(m,1));
y=b*(-1+2*rand(m,1));
f=sqrt(a^2 - b^2);
indexMatrix=zeros(m,3);
indexMatrix(:,1)=x;
indexMatrix(:,2)=y;
insidePointsMatrix=zeros(1,2);
j=1;
for i=1:m
    insidePoint=sqrt(((x(i)+f).^2) + (y(i))^2) + sqrt(((x(i)-f).^2) + (y(i))^2);
    if (insidePoint<=2*a)
        indexMatrix(i,3)=1;
        %insidePointsMatrix(j,:)=indexMatrix(i,1:2);
        if j<=N
            insidePointsMatrix(j,1:2)=indexMatrix(i,1:2);
            j=j+1;
        end
    end
end

我正在阅读有关 arrayfuncellfun 的内容,我想知道是否可以缩短我已经使用它实现的功能。给定一个 2 x n 矩阵 A,其中 (u,v) 是任何给定行的条目,如何返回列出以下公式每行输出的矩阵?

sqrt((u+f).^2+v.^2) + sqrt((u-v)^2+v^2)

变量fa在上面定义。我正在尝试将一系列点转换为椭圆。

最佳答案

使用find应该会给你u,v坐标:

cond=sqrt(((x+f).^2) + y.^2) + sqrt(((x-f).^2) + y.^2) ;
ind=find(cond<=2*a);
u=x(ind);
v=y(ind);

关于matlab - 我如何使用 cellfun 或 arrayfun 来代替这个循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14681177/

相关文章:

java - 查找相同值的4个连续数字-垂直和对角线

r - 使用 R 创建完全对立的绘图

opencv - 如何从单个图像获取相机变换矩阵?

python - 是否可以对 NumPy 数组的递归计算进行矢量化,其中每个元素都依赖于前一个元素?

python - 跨多维数组的矢量化 NumPy linspace

matlab - 有效地将数据拆分为 bin

matlab - 对矩阵的每 n 行求和

python - 带外积的矢量化和约简 - NumPy

python - MatLab 和 numpy 中 Hermitian 矩阵特征值的差异

bash - 编写 bash 脚本以在 UNIX 中运行 matlab 程序?