我正在进行模拟,但我无法得到我想要的答案。 以下是我的代码:
req = [8 2 7; 2 4 5; 3 5 7];
time = [2 1 7; 3 4 6; 4 6 1];
max_time = max(max(time));
for i = 1 : 3
timeline(:, i) = 1 : 1 : max_time;
new(:, i) = setxor(timeline(:, i), time(:, i));
end
disp(timeline);
disp(new);
for i = 1 : 3
for k = i : 4
timeline(timeline(:, i) == new(k, i)) = 0;
end
end
disp(timeline);
假设我得到的答案是时间线相等[0 1 1; 2 0 0; 3 0 0; 4 4 0; 0 0 0; 0 0 0; 0 6 6; 0 0 7]。时间轴中的数字不等于new,然后它将替换为0.感谢您的帮助。
如果时间是三维数组怎么样?
答案 0 :(得分:1)
不是我的语言,所以我不能说,但在其他人发布更好的答案之前,我会给你一些方向。尝试制作一些简单的函数,这些函数不做任何事情,只需要参数并将它们传递给它们调用的任何函数你的问题似乎与你的功能的签名以及你如何调用它们有关,一旦你消除了其他所有内容,那么答案可能就会突然出现在你身上。
答案 1 :(得分:0)
如果我正确理解了问题,可以使用matrix indexing来解决。请考虑以下事项:
time = [2 1 7; 3 4 6; 4 6 1]; %# row indices
c = repmat(1:size(time,2),size(time,1),1); %# column indices
timeline = zeros(max(time(:)),size(time,2)); %# prepare result matrix
idx = sub2ind(size(timeline), time(:),c(:)); %# convert to linear indices
timeline(idx) = time; %# place the number in the matrix
结果:
>> time
time =
2 1 7
3 4 6
4 6 1
>> timeline
timeline =
0 1 1
2 0 0
3 0 0
4 4 0
0 0 0
0 6 6
0 0 7
如果time
包含零个元素,则必须跳过这些值。例如:
time = [2 1 7; 3 0 6; 0 0 1];
c = repmat(1:size(time,2),size(time,1),1);
ind = ( time(:)~=0 ); %# non-zero entries
timeline = zeros(max(time(:)),size(time,2));
idx = sub2ind(size(timeline), time(ind),c(ind)); %# skip zero indices
timeline(idx) = time(ind); %# skip zero indices