python - 二维数组匹配和重新排序具有约束的矩阵中的整数元素
问题描述
我有以下二维数组/矩阵:
matrix = np.array([[1, 11, 12, 0, 14],
[1, 11, 22, 23, 0],
[1, 33, 32, 34, 0],
[1, 33, 0, 53, 41],
[1, 0, 54, 0, 41]
])
如果我必须在第 3 行的上述矩阵中添加数字 11,则可能的结果之一如下:
1 11 12 0 14
1 11 22 23 0
1 11 32 34 33 Moved 33 to column 5, Added 11 to column 3
1 0 41 53 33 Moved 41 to column 3, Moved 33 to column 5 (constraint 1/4)
1 54 41 0 0 Moved 54 to column 2, Moved 41 to column 3 (constraint 1/4)
上述约束如下:
约束 1:如果矩阵中有匹配的数字,则必须将新数字添加到同一列。也就是说,如果我必须在第 3 行的矩阵中添加 11,那么在最终输出中它必须出现在第 2 列中,因为第 1 行和第 2 行已经在第 2 列中有它
约束 2:要在任何行中添加新数字,都会有值为 0 的空单元格,因此如果没有空格,我们需要停止添加数字
约束 3:每一行都有唯一的值
约束 4:如果您从任何行移动或移动一个值并且该值存在于多行中,那么您必须再次将所有值移动到同一列
约束 5:上面的值的添加和移动需要以最小的步骤完成(优化问题)
到目前为止,我使用 Python 语言做了以下事情
- 我使用了匹配(在 python 中转换的 R 语言匹配函数)和矩阵的重新排序:它工作(不考虑优化)但是它在其他用例中失败
matrix = np.array([[1, 11, 12, 0, 14],
[1, 11, 22, 23, 0],
[1, 33, 32, 34, 11],
[1, 33, 0, 53, 41],
[1, 0, 54, 0, 14]
])
注意在上面的用例中,我在最后一行添加了 14,我的程序因一个约束而失败,其中 14 值在不同的列中
- 我也想知道我应该使用什么样的算法,例如回溯/约束编程
任何建议都将有助于解决问题或代码片段
解决方案
推荐阅读
- youtube - 如何从 VidIQ 和 TubeBuddy 复制批量片尾复制功能?
- if-statement - 在电子表格单元格中使用带有多个 ELSEIF 和 ELSE 的 IF
- date - 保存到 Kafka 后日期转换为默认值
- windows - 如何在 Python/Go/C/Batch 中获取 Windows 中的扩展文件属性?
- swift - 当蓝牙设备在 CoreBluetooth 上连接或断开连接时执行操作
- java - Hibernate 4.3 在尝试映射三结构时加载数据库的所有元素时在 setter 内部发生异常
- python - 如何使用 numpy 计算数组一部分的平均值
- go - 无法在 Visual Studio 代码中调试 Go
- android - 在构造函数 Kotlin 中使用泛型作为参数
- visual-studio-2019 - Visual Studio 2019 是否有 Monokai 语法突出显示