How to slice these variables?
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Joerg Pfannmoeller
am 9 Nov. 2021
Kommentiert: Joerg Pfannmoeller
am 14 Mär. 2022
Hi,
can somebody help me to slice these variables in a parfor loop?
indices(:,1) = max(min(ceil(vector(:,1)-Xcoor),nx),1);
indices(:,2) = max(min(ceil(vector(:,2)-Ycoor),ny),1);
indices(:,3) = max(min(ceil(vector(:,3)-Ycoor(idx_parfor)),nz),1);
I currently use the construction:
indices_1 = max(min(ceil(vector(:,1)-Xcoor),nx),1);
indices_2 = max(min(ceil(vector(:,2)-Ycoor),ny),1);
indices_3 = max(min(ceil(vector(:,3)-Ycoor(idx_parfor)),nz),1);
Is there any way to use a single variable indices again? In order to allow for indexing of the variable indices? The parfor variable is of course idx_parfor. An indexed solution would be unavoidable if there are more than 3 indices.
Best Joerg
2 Kommentare
Rik
am 9 Nov. 2021
If it is merely the detection that is preventing execution, you could consider putting this in a separate function.
Also, shouldn't you be using Zcoor in your third call?
Akzeptierte Antwort
Edric Ellis
am 9 Nov. 2021
I think what you're trying to do is something like this, which doesn't work:
N = 4;
out = zeros(N, 3);
try
parfor idx = 1:N
out(idx,1) = idx;
out(idx,2) = -idx;
out(idx,3) = 2*idx;
end
catch E
disp(E.message)
end
The way to fix this is to assign a whole column of out all in one indexing expression:
N = 4;
out = zeros(N, 3);
parfor idx = 1:N
o1 = idx;
o2 = -idx;
o3 = 2*idx;
% Single sliced indexing assignment into `out`
out(idx,:) = [o1, o2, o3];
end
disp(out)
N = 4;
M = 3;
out = zeros(N, M);
parfor idx = 1:N
% inner for-loop over the columns of `out`
for jdx = 1:M
out(idx,jdx) = 1000 * idx + jdx;
end
end
disp(out)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!