关于FOR到PARFOR转换的帮助

1次查看(最近30天)
dsmalenb
dsmalenb 8月7日
大家好!
我已经看了几个关于如何转换for循环到parfor的例子,但由于某些原因,我不能让我的工作。我提供了一个例子,我有什么工作在我的for循环下面和我的注意在parfor循环。我已经有一段时间没有使用parfors了,所以如果有人能帮助我,我将非常感谢。
j = 1: N
j
清晰的D
[signal fs] = audioread(strcat(S(j)).folder,' / 'S (j) . name));
信号=信号(:1);
D (: 1) = spectralCentroid(信号,fs);
D (: 2) = abs (spectralSlope(信号,fs));
D = D / max (D);
D(任何(isnan (D), 2 ), :) = [];
结束
parforj = 1: N
j
[signal fs] = audioread(strcat(S(j)).folder,' / 'S (j) . name));
信号=信号(:1);
D {j} (: 1) = spectralCentroid(信号,fs);
D {j} (:, 2) = abs (spectralSlope(信号,fs));
%消除NaN行
D {j}(任何(isnan (D {j}), 2),:);
将超立方体的描述符规范化
% D = D /max(D);
结束
如果我注释掉,后者不会运行
D {j}(任何(isnan (D {j}), 2),:);
直到我在parfor玩得开心,然后在直接的窗口运行下面的程序
D{1}(任何(isnan (D {1}), 2 ),:) = [];
它的工作原理。我不知道为什么。
谢谢你的帮助!

答案(1)

沃尔特·罗伯森
每次迭代都覆盖整个d,结果就是上次迭代中赋值的结果。但是parfor的迭代顺序不是固定的,所以如果允许循环,结果将是随机的。
1评论
沃尔特·罗伯森
您目前直接将值构建到D{j}的各个部分中。相反,您应该构建一个临时变量,并在完全构建后将该变量赋值给D{j}。

登录评论。

标签

下载188bet金宝搏

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!