If statement in cell array; skip row if it equals certain value
조회 수: 6 (최근 30일)
이전 댓글 표시
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
댓글 수: 0
답변 (1개)
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
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!