匿名数组的Matlab就地运算

匿名数组的Matlab就地运算,matlab,expression,Matlab,Expression,我是Matlab新手,正在努力理解数组表示法的概念(来自Perl背景) 假设我们有两个随机向量(X,Y),它们是二维坐标(范围-r…r),我们想找出哪些点(X,Y)位于半径r的圆内。这将是我们的设置: n = 100000000; % point number r = 1; % circle size X = (rand(1,n) .* 2*r) - r; % generate coordinates (-r .. r)

我是Matlab新手,正在努力理解数组表示法的概念(来自Perl背景)

假设我们有两个随机向量(
X
Y
),它们是二维坐标(范围
-r
r
),我们想找出哪些点(X,Y)位于半径
r
的圆内。这将是我们的设置:

 n = 100000000;              % point number
 r = 1;                      % circle size
 X = (rand(1,n) .* 2*r) - r; % generate coordinates (-r .. r)
 Y = (rand(1,n) .* 2*r) - r; 
据我所知,在对坐标进行分类的过程中,Matlab几乎可以做任何完全矢量化的事情(在
C
):

现在,我只想保留圆内点的值,因此从
C
中删除所有
-1
(以前的>=0值),这可以通过以下方式完成:

 C(C < 0) = 0;
C(C<0)=0;
我没有找到明显的方法将后一个表达式与前一个表达式一起包含到一个表达式中,因为我没有找到如何“寻址”将要由距离、符号和否定运算符创建和修改的临时数组,以便使用
C(C<0)=0执行另一个“步骤”。这可能吗

编辑

根据Dan在下面的评论,我可以将整个表达式简化为:

 C = ( (X.^2 + Y.^2) - r^2 ) < 0;
C=((X.^2+Y.^2)-r^2)<0;

这正是我一直在寻找的。非常感谢你!我认为这在Matlab中是不可能的…

在您的特定情况下,我认为您可以将其等同于1:

C =  -sign((X.^2 + Y.^2) - r^2) == 1;

因为最终输出的只是一个由
1
s和
0
s组成的矩阵,所以您最好利用Matlab的逻辑数据类型


但是,在Matlab中处理临时矩阵并不是真正的方法。通常,您只需将其作为两行代码。但是如果你真的想,我想你可以用这个函数来做。

我想你现在把元素设置为
1
,而不是设置为
0
before@Dan我试着得到1-s作为结果,以便有可能在以后进行
sum()
-
/
符号()
序列只是一次尝试(我不太清楚)啊,我没看到你改变了它。那样好多了。
C =  -sign((X.^2 + Y.^2) - r^2) == 1;
C =  -sign((X.^2 + Y.^2) - r^2) > 0;