Arrays 并行MATLAB-创建分布式向量
我在Matlab中有一个相对较小的向量Arrays 并行MATLAB-创建分布式向量,arrays,matlab,distributed,Arrays,Matlab,Distributed,我在Matlab中有一个相对较小的向量 R = randn(1,1000); 现在我想通过选择一组指定的元素来创建一个更大的向量,如下所示 Q = R([1 5 8 5 8 1 3 4 19 1, etc]); 所选元素的数量numel(Q)为1000000+,非常大。是否可以执行此步骤,使生成的向量Q自动成为分布式阵列,准备在多核机器上进行并行处理 谢谢 这里提到的方法假设您希望至少有R和Q作为分布式阵列 方法#1 此解决方案将基于此- 请注意,对于上述代码,ind将位于客户端。如果您也希
R = randn(1,1000);
现在我想通过选择一组指定的元素来创建一个更大的向量,如下所示
Q = R([1 5 8 5 8 1 3 4 19 1, etc]);
所选元素的数量numel(Q)
为1000000+,非常大。是否可以执行此步骤,使生成的向量Q
自动成为分布式阵列,准备在多核机器上进行并行处理
谢谢 这里提到的方法假设您希望至少有
R
和Q
作为分布式阵列
方法#1
此解决方案将基于此-
请注意,对于上述代码,ind
将位于客户端。如果您也希望将其作为分布式阵列,请使用此-
N = 3;
R = randn(1,N,'distributed');
ind = ones(N,'distributed');
[~,ind(:,:)] = sort(rand(numel(R)));
Q = R(ind(:))
R = randn(1,N,'distributed');
Q = R(reshape(ceil(N*rand(N)),1,[]));
输出-
R =
0.3080 0.8227 0.4248
Q =
0.8227 0.3080 0.4248 0.4248 0.8227 0.3080 0.3080 0.4248 0.8227
在您的情况下,N=1000
方法#2 如果您不关心
R
中的元素在Q
中重复了多少次,那么您可以使用此选项-
N = 3;
R = randn(1,N,'distributed');
ind = ones(N,'distributed');
[~,ind(:,:)] = sort(rand(numel(R)));
Q = R(ind(:))
R = randn(1,N,'distributed');
Q = R(reshape(ceil(N*rand(N)),1,[]));
对不起,Q现在是分布式阵列吗?我需要对它做进一步的操作,我希望它们在16日并行工作cores@AiridasKorolkovas如果你只想创建一个分布向量,那么在你创建了一个法向量Q-
dQ=distributed(Q)
,其中dQ
代表你的分布向量之后,这会起作用吗?当然会,但我认为直接使用分布式版本可以节省一半的处理时间。我正在考虑一些类似于直接从非零项构建稀疏()矩阵的方法,而不是先创建一个完整的矩阵,然后再转换为稀疏。@airidaskorolkova只是从R=randn(1,N,'distributed')开始
即R
是分布式阵列,然后Q
将自动成为分布式阵列。因此,客户端不需要保存任何数据?检查编辑的代码。另外,我不知道为什么你需要在这里使用稀疏矩阵,因为你在这个问题上有问题。