我有一个大小为 10x100 的矩阵 A,如下所示。我想做的是:
- 我将逐行工作,对于每一行,我将检查该行中每个列的数据
- 假设我现在在第一行的第一个 col 单元格中。我将检查该值是否为零我将移至下一个列,依此类推,直到我找到一个具有非零值的列并保存其列号,例如列 3“这意味着列 1 和 2 为零”
- 现在我在第 1 行的第一个非零列中,我将移动到下一个列,直到找到一个零值的列。我将在这个必须是非零的零之前获取 col 并保存它。例如 col 7 “这意味着 col4&5&6 是非零并且 col8 是零”
- 现在我想保存这两列之间的中间中间列,例如 col3 和 col7,然后中间 col 是 col5,所以我将保存索引 row1_col5。如果有两个中间值,那么它们中的任何一个都可以。
- 然后我将移动到下一个列,直到找到一个非零列“从 2--> 5 执行相同的步骤”,直到第一行完成。
- 移动到下一行并从步骤 2--> 5 重新开始。
- 有两个规则:-第一个是只有当至少有 3 个非零连续值时,我才会得到非零连续值的中间索引,如果有两个非零连续值,那么中间不会被计算 - 第二个是如果零连续值的数量小于3,那么它们将被忽略并被视为非零值。例如,在下面的示例中,第一行中间值为 col5 和 col11。在 row2 中 col5 被计算在内,而 row3 中没有 cols 满足此条件,在 row4 中 col6 或 col7 将被计算在内。
- 完成所有行后,希望有一个向量或数组来保存所有中间索引的位置,例如 row1_col5 row1_col17 row2_col_10 等等。
例子:
A = [ 0 0 0 2 4 1 0 0 0 1 3 2;
0 0 0 5 1 1 1 1 0 0 0 1;
0 3 4 1 0 3 1 2 0 0 1 3;
0 0 0 0 1 3 4 5 0 0 0 0];
对于第一行,中间值将是 5 和 11 等等所以如果有人可以请告诉我如何用最少的处理来做到这一点,因为这可以使用循环来完成,但是如果有更有效的方法来做到这一点?如果需要任何澄清,请告诉我。