【发布时间】:2015-05-18 21:59:00
【问题描述】:
A = [0,0,1,0,1,0,1,0,0,0;
0,0,0,0,1,0,1,0,0,0;
0,0,1,0,1,0,1,0,0,0];
B = [2,5;
1,6;
3,10];
预期的输出元胞数组:
C = [1,1,1,1; %// 2-3-4, 3-4-5, 4-5, 5
0,0,1,1,1,0; %// 1-2-3, 2-3-4, 3-4-5, 4-5-6, 5-6, 6
1,1,1,1,1,0,0,0]; %// 3-4-5, 4-5-6, 5-6-7, 7-8-9, 8-9-10, 9-10, 10
矩阵 B 包括应该使用哪些列来执行矩阵 A 上的条件。例如,B 的第一行是 2 和 5;所以应该使用矩阵 A 的第 2 5 列之间的元素来执行条件。 B的第二行是1和6;所以应该使用第 1 6 列之间的元素来执行条件。等等……
条件:如果连续3个元素之和大于或等于1,则将1写入矩阵C;否则写 0。例如,A 包括 0,1,0 作为三个连续元素(和为 0+1+0=1),因此将 1 写入矩阵 C。再例如,A 在第二行的前三个元素为 0 ,0,0(总和为 0),所以将 0 写入矩阵 C。以此类推...
“有时可以认为只有 1 或 2 个连续元素。”
例如,A 的第一行条件执行以第 5 列结束,因此只应考虑第 5 列的值;即 1。所以 1 被写入矩阵 C。
解释C的第一行:
1, 因为(A(1,:) 的 2,3,4 个元素之和)>= 1
1, 因为(A(1,:) 的 3,4,5 个元素之和)>= 1
由于最大限制为 5,因此此处仅采用 2 个连续元素
1,因为(仅 A(1,:) 的 4,5 个元素的总和)>= 1由于最大限制为 5,因此此处仅采用 1 个连续元素
1,因为(仅 A(1,:) 的第 5 个元素的总和)>= 1
没有for循环,只有矩阵运算,我怎么能完成这个复杂的任务?还是什么技巧?
【问题讨论】:
-
"(和为 0+1+0=1),所以将 1 写入矩阵 C",为什么?你说总和应该大于大于1。我猜你的意思是大于等于1而不是“大于1”
-
你是怎么得到矩阵
C的?另外,您如何定义连续元素,逐行,逐列?例如,在第一行,第 2 到 5 列,你得到矩阵 C 中的 [1;1]。你如何得到接下来的两个 1? -
@ParagS.Chandakkar 是的,它应该大于等于 1。
-
@ParagS.Chandakkar 按行排列。第三个 1 是第一行 (0,1) 的两个连续元素的结果,第四个 1 是第一行 (1) 的一个连续元素的结果。考虑到我只能在第一行的第 5 个元素(即矩阵 B)之前执行该条件。
-
感谢@Santhan 的编辑,现在问题更清楚了。