If statement in cell array; skip row if it equals certain value

조회 수: 6 (최근 30일)
JH
JH 2015년 11월 23일
댓글: JH 2015년 11월 24일
Hi all, I have a cell structure named RigidBodies, which contains five structures. These structures contain from 1 to 4 cells named Marker + number. Each Marker contains three columns with x,y and z data through time. I wrote a loop to subtract a specific value (eg. x0, y0 and z0) from the x, y and z values if the Marker cell is not empty and if the values of x,y and z are different than 0. If the values are 0, I want the rows to stay as they are. Below is my code, which does not report any error and neither does its job - it does not subtract the desired value (sample data is attached). What is wrong? Thank you.
Jurij Hladnik
Subtract = RigidBodies(1).Marker4(1,:);
for c = 1 : length(RigidBodies);
nmarkers = fieldnames(RigidBodies(c));
nmarkers = sum(strcmp(cellfun(@(x) x(1:end-1), nmarkers, 'un', 0), 'Marker'));
for d = 1 : nmarkers
~isempty(RigidBodies(c).(sprintf('Marker%d',d)))
for f = 1 : length (RigidBodies(c).(sprintf('Marker%d',d)))
if (RigidBodies(c).(sprintf('Marker%d',d))(f,:)==[0,0,0])
continue
else
RigidBodies(c).(sprintf('Marker%d',d))(f,:) = RigidBodies(c).(sprintf('Marker%d',d))(f,:) - Subtract;
end
end
end

답변 (1개)

Thorsten
Thorsten 2015년 11월 23일
편집: Thorsten 2015년 11월 24일
Subtract = RigidBodies(1).Marker4(1,:);
for c = 1 : numel(RigidBodies)
nmarkers = fieldnames(RigidBodies(c));
for d = 1:numel(nmarkers)
x = getfield(RigidBodies, {c}, nmarkers{d});
if ~isempty(x)
idx0 = find(sum(x,2) == 0);
x = bsxfun(@minus, x, Subtract);
for e = idx0, x(e, :) = [0, 0, 0]; end
RigidBodies = setfield(RigidBodies, {c}, nmarkers{d}, x);
end
end
end
  댓글 수: 3
Thorsten
Thorsten 2015년 11월 24일
Dear JH,
there was an error in my code. I corrected it, it should work now.
JH
JH 2015년 11월 24일
Still doesn't work. I get the following error: "Subscripted assignment dimension mismatch."

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by