我正在尝试在MatLab R2016a中设置一个parfor嵌套循环,如下所示。
N = size(A,1);
M = size(v,1);
in = zeros(N*M,1);
parfor i=1:N
for j=1:M
k = (i-1)*M+j;
if sqrt(sum((A(i,:)-v(j,:)).^2))<=tol
in(k) = i;
end
end
end
然而,我得到了下面的错误, ' in‘的有效索引在PARFOR循环中受到限制。有没有办法纠正这个问题,因为数组A和v都相当大
我想在matlab中并行化我的部分代码。例如,以下部分:
v1=[1,3,6,8];
ggx=5.*ones(15,14);
gax=ones(15,14);
parfor i = 1:length(v1)
m = v1(i);
if m > 1
gax(1:m-1,m-1) = ggx(1:m-1,m-1);
end
if m<nn
gax(m+1:end,m) = ggx(m+1:end,m);
end
end
但是有一个错误: error: parfor中的变量gax不能与MATLAB中的classified.See并行,称为“概述”。
有人知道如何删除错误
我正在尝试在Matlab中运行这段代码
a = ones(4,4);
b=[1,0,0,1;0,0,0,1;0,1,0,0;0,0,0,0];
b(:,:,2)=[0,1,1,0;1,1,1,0;1,0,1,1;1,1,1,1];
parfor i = 1:size(b,3)
c = b(:,:,i)
a(c) = i;
end
但得到的错误是:
Error: The variable a in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".
因此,我试图用一个parfor调用这个函数(基本上是通过一个parfor循环中的向量用傅里叶级数进行曲线拟合):
function[coefnames,coef] = fourier_regression(vect_waves,n)
coef = zeros(length(vect_waves)-n,18);
current_coef = zeros(18,1); % All the terms of the fourier series
x = 1:n;
parpool_obj = parpool;
parfor i=n:length(vect_w
我有这个(相当长的) Matlab代码和嵌套循环,在这里我想并行化主要的耗时迭代。唯一(显然)给我问题的变量是DMax,在这里我得到了错误:
Error: The variable DMax in a `parfor` cannot be classified.
See Parallel for Loops in MATLAB, "Overview".
这是我的代码草案:
t0=matrix (Maxiter,1); % This is a big matrix whose dimensions are reported in brachets
Maxiter = 1E6;
D
有人知道在matlab中使用parfor这段简单的代码是怎么回事吗?谢谢,
我将一个矩阵分成四个数组,并希望独立地更新每个数组中的元素
下面是一个简单的版本:
a = zeros(4,4);
parfor i = 1:4
j = 2;
a(j,i) = 3;
end
错误:“a”的有效索引在parfor循环中受到限制;
然而,
这是可行的:
a = zeros(4,4);
parfor i = 1:4
a(2,i) = 3;
end
另一个更简单的非工作版本具有相同的错误:
a = zeros(4,4);
parfor i = 1
我希望使用parfor作为嵌套循环,我已经做了一个示例,展示了我的结构:
temp_vars = 1:10;
global_arr = zeros(10,10);
parfor i=0:9
for j=0:9
constant_var = temp_vars(i+1);
global_arr(i+1, j+1) = i*j*constant_var;
end
end
MATLAB给了我一个错误:Error: The variable global_arr in a parfor cannot be classified.。
但是,如果我将i
我在Matlab中使用parfor有问题:
-in我的笔记本电脑使用本地集群配置文件和12工作人员,parfor循环能够大大减少与for循环相关的计算时间;
-in是同一台膝上型计算机,但使用我部门的HPC集群和30工作人员,parfor循环要比for循环慢得多,也比使用12名工作人员的本地集群parfor循环慢得多。
我不明白为什么。要解决的迭代次数超过1000次,每次迭代都足够复杂,原则上可以从parfor循环中获益,这一点在我使用本地集群时得到了证明。也许有些步骤我忘了去做?要激活工作人员,我输入命令matlab pool open 30。
从平行的东西开始..。
我有一个代码,可以归结为用可变长度的数组填充矩阵A (用NaNs预先分配)的列:
A = nan(100);
for ii=1:100
hmy = randi([1,100]); %lenght of the array
A(1:hmy,ii) = rand(hmy,1); %array
end
简单地转换for中的parfor甚至不运行
parfor ii=1:100
hmy = randi([1,100]); %how many not NaN values to put in
A(1:hmy,ii) = rand(hmy,1);
我使用Matlab学习已经有一段时间了,我想学习更多关于并行计算的知识。Parfor似乎是一种非常有用的技术。我不能让它在以下代码中工作:
resultsOfRW = ones(100,N);
parfor i= 1:100
RWs{i} = A; %I want to modify A in every iteration
j = 1;
S = 2; %just something larger than 1
while j <= N && S > 1
RWs{i} = DoSomethingRandomly(RWs
我有一段想要并行运行的代码。传递给包含parfor循环的函数的参数之一是函数句柄,然后在parfor循环中执行该句柄。像这样
[X] = randstep( X,params,roomfun )
...
parfor i=1:N
while ~ok
X(:,i) = A*X(:,i);
if roomfun(X(:,i))
ok = 1;
end
end
end
然而,MATLAB抱怨roomfun,说它是索引的,但不是切片的。当然情况并非如此,因为它是一个函数,它可以在没有其他循环迭代的情况下很好地执行。
有没有
我正试图用MATLAB来加速大量数据的匹配,使用并行性,我面临着一个非常奇怪的问题。
我试图隔离这个问题,希望有人能知道发生了什么事。下面是示例代码:
f = @(a, x) a*x;
fitopt = fitoptions(f);
for i = 1:5
disp(fitopt);
end
如果我运行上面的代码,fitopt的内容将按预期的5倍编写。但是,如果我将for替换为parfor循环,则fitopt设置为空,不显示任何内容。
有什么线索可能出了什么问题吗?
我的配置: windows 7,64位上的MATLAB 2014 a
我写了一段代码如下
....
index = 1;
parfor mi=initmu:maxmu
for la1i=initla+1:(maxla-initla)/stepla+1
ImageD=uint8(GaussPoisonDenoise(Image, mu(mi), la1(la1i), la2(la1i)));
p = psnr(ImageD, Image0);
index=index+1;
end
end
....
但是Matlab告诉我"parfor循环不能运行,因为变量index的使用方式“。那是什么意思?
我有一个这样的parfor loop:
parfor i=1:20
for j=1:5
%% Some codes
[~,~,~,AUC]=perfcurve(testTargets,testOutputs,'1');
AUC_T(i)=AUC;
end
%% averaging between AUC_Ts in outputs of j=1:5
end
在运行以下代码后,出现了以下错误:
The variable AUC_T in a parfor cannot be classified.
See Parallel for Loops in MATLAB, &
我需要在MATLAB并行编程的帮助。我有一个文件名列表;对于每个文件,我必须做一个独立的计算,返回一个表行。所有的tableRows都应该集成到一个表中。行的顺序没有任何意义。如何并行处理所有文件并将行插入到一个表中?
samples=dir('*.txt');
for smpl=samples'
row=processSamples(smpl,prm1,prm2); //should be parallel
table=[table;row];
end
谢谢
在我的for循环中,我设置了一个矩阵变量ga来保存每个循环的结果。但是,当我将for循环更改为parfor循环(以加速)时,会出现如下警告:
当我运行代码时,我得到了另一个错误:
代码是:
R=100;
alpha_set = [1,2,3,4,5]; % This is an index set
ga = zeros(2,5); % to save results of addition
parfor h=1:R
[A1,A2] = random_sample(A,0.6);
...
for ai=1:5
alpha = alpha_set(ai);
我对Matlab还是个新手。我使用parfor循环来完成一个非常耗时的任务。请参见下面的代码片段。然而,我从Matlab得到了错误信息。有人能帮上忙吗?我读了关于parfor的文档,但不知道该怎么办……
谢谢。
The parfor loop cannot run due to the way variable "M" is used
The parfor loop cannot run due to the way variable "T" is used
Explanation
MATLAB runs loops in parfor function
编辑:我修改了下面的问题。我所提供的最初的例子过于简单化,无法描述我所面临的问题。
考虑以下两个例子。第一个示例运行良好:
parfor i = 1:4
for j = 1:3
A(i,j) = i + j;
end
end
然而,第二个例子导致Matlab抱怨。
B = [1 3 4;1 2 5;2 3 4;1 3 5];
parfor i = 1:4
for j = 1:3
A(i,B(i,j)) = i + j;
end
end
错误是:
The PARFOR loop cannot run due to
如何使用parfor写入结果矩阵行
代码示例:
xCount = 10;
yCount = 20;
area = xCount*yCount;
PP = nan(area,3);
parfor x = 1:10
for y = 1:20
id = y + (x-1)*yCount; % global PP line id.
z = x^2+y*10; % my stuff to get Z.
PP(id,:) = [x y z]; % write to PP line
end
end
由于变量'PP‘的使用方式,PAR
假设我有一个包含一些数据值的数组x。
我执行了一个聚类算法,该算法生成了一个标签名为labelMap的标签映射。数据中的每个点现在都有一个与其关联的唯一集群标签。
然后对每个子集执行函数foo(子集,secondArg)。函数foo返回一个新数组,其结果与给定参数的大小相同(它是map()函数,它还接收第二个参数)。
以下是目前的实施情况:
x = rand(1,1000);
numClusters = 3; % specified in advance by the user, for example using a clustering algorith
我想知道如何在MATLAB中复制(或者删除)句柄对象。
我目前正在使用MATLAB和一个名为CPLEX的附加组件为大型方程系统编写求解器。此解算器本质上涉及创建CPLEX控制柄对象,然后使用solve方法进行解算,如下所示:
P = Cplex() %Create a Cplex object
%Code to specify the Cplex parameters
P.solve() %solve the Cplex object
在上面的代码中,P是一个属于Cplex()类的MATLAB句柄对象。它存储与它们的方程的因子相关的矩阵的结构。
我运行的主要问题是,我必须多次“求解”相同的CP
我用Matlab和cell2mat()函数得到了关于内存的奇怪行为...
我想做的是:
cell_array_outer = cell(1,N)
parfor k = 1:N
cell_array_inner = cell(1,M);
for i = 1:M
A = do_some_math_and_return_a_sparse_matrix( );
cell_array_inner{i} = sparse(A); % do sparse() again just to be paranoid
end
cell_array_outer{k} = spa
parfor是在多个“工作人员”之间分发密集计算的独立迭代的一种方便方法。一个有意义的限制是,parfor-loops不能嵌套,这是对和等类似问题的回答。
为什么跨循环边界的并行化是如此可取的
考虑下面的代码,迭代在一台允许4名工作人员的机器上花费的时间变化很大。这两个循环迭代超过6个值,显然很难在4个之间共享。
for row = 1:6
parfor col = 1:6
somefun(row, col);
end
end
选择parfor的内环似乎是个好主意,因为对somefun的单个调用比外部循环的迭代更易变。但是,如果每次调用somefun的运行时间非