【发布时间】:2014-10-07 13:29:21
【问题描述】:
我是 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 = - ... % negate sign, 1: within, 0,-1: outside
sign( ... % -1: within, 0,1: outside
(X.^2 + Y.^2) - r^2 ... % calculate distance
);
现在我想只保留圆内点的值,因此从 C 中删除所有 -1(以前 >=0 值)值,这可以通过以下方式完成:
C(C < 0) = 0;
我没有找到明显的方法将后一个表达式与前一个表达式包含在一个表达式中,因为我没有发现即将创建和修改的临时数组是如何被距离- 、符号和否定运算符可以被“寻址”以使用C(C < 0) = 0 执行另一个“步骤”。这可能吗?
编辑:
根据 Dan 下面的评论,我可以将整个表达式简化为:
C = ( (X.^2 + Y.^2) - r^2 ) < 0;
这正是我所寻找的。非常感谢你!我不认为 这 在 Matlab 中是可能的......
【问题讨论】:
-
我想你想要
> 0,因为你现在将元素设置为1,而不是像以前那样设置为0 -
@Dan 我试图得到 1-s 结果有可能在以后做一个
sum()。-/sign()sequence 只是尝试到达那里(我不知道更好) -
啊,我没有看到你改变了它。这样会好很多。
标签: matlab expression