我想下面Matlab的逻辑索引模式转换成Scala代码斯卡拉逻辑索引:与理解
% x is an [Nx1] array of Int32
% y is an [Nx1] array of Int32
% myExpensiveFunction() processes batches of unique x.
ux = unique(x);
z = nan(size(x));
for i = 1:length(ux)
idx = x == ux(i);
z(idx) = myExpensiveFuntion(x(idx), y(idx));
end
假设我在斯卡拉val x: Array[Int]
工作。做这个的最好方式是什么?为了澄清,我正在寻找一次处理(x,y)的批次,按唯一x分组,并返回一个结果(z),其中的顺序与初始输入相对应。我打算对x进行排序,但最终需要回到原始未排序的顺序。我的主要要求是以清晰和合理有效的方式处理所有的索引/映射/排序。
对于那些谁不知道MatLab,你能澄清你想要做什么计算吗? – 2013-02-28 16:16:52
IIRC:Matlab的'unique'返回'x'中的唯一值,这转换为Scala中的Set。表达式'idx = x == ux(i);'给出一个索引的布尔向量,它对应于某个唯一值。 'z','x'和'y'被投射/减少到这些指数。 – bluenote10 2013-02-28 16:38:34
@RandallSchulz - 对Scala用户来说最奇怪的部分是在matlab中,如果你用一个二进制向量索引一个向量,它将使用它作为过滤器来使用哪个索引。很简单,除了_you可以分配到你的filter_。所以'z(a)= y(a)+ 1'会将'z'的每个元素设置为等于'y'的相应元素加上一个元素索引,其中'a'为真(实际上是1)。 – 2013-02-28 16:42:20