我正在尝试找到一种方法(惯用的或其他方式)来转换看起来像的矩阵
0 1
0 1
0 1
Run Code Online (Sandbox Code Playgroud)
分成3个单独的矩阵
0 1
0 0
0 0
0 0
0 1
0 0
0 0
0 0
0 1
Run Code Online (Sandbox Code Playgroud)
这样当我将它们全部组合在一起时,我就得到了原始的。这些“子矩阵”中的每一个都必须仅具有 1 个非零元素,并且必须具有与原始矩阵相同的形状。
一种解决方案:
\n\n任意布尔矩阵:
\n\n m\xe2\x86\x904 3\xe2\x8d\xb4?12\xe2\x8d\xb42\n m\n0 0 1\n0 0 0\n1 1 0\n0 1 0\nRun Code Online (Sandbox Code Playgroud)\n\n注意它的形状:
\n\n d\xe2\x86\x90\xe2\x8d\xb4m\n d\n4 3\nRun Code Online (Sandbox Code Playgroud)\n\n将矩阵分解为向量:
\n\n v\xe2\x86\x90,m\n v\n0 0 1 0 0 0 1 1 0 0 1 0\nRun Code Online (Sandbox Code Playgroud)\n\n生成索引:
\n\n i \xe2\x86\x90\xe2\x8d\xb3\xe2\x8d\xb4v\n i\n 0 1 2 3 4 5 6 7 8 9 10 11\nRun Code Online (Sandbox Code Playgroud)\n\n为原始矩阵中的每个 1 构造一个矩阵:
\n\n a\xe2\x86\x90d\xe2\x88\x98\xe2\x8d\xb4\xc2\xa8\xe2\x86\x93(v/i)\xe2\x88\x98.=i\n a\n 0 0 1 0 0 0 0 0 0 0 0 0 \n 0 0 0 0 0 0 0 0 0 0 0 0 \n 0 0 0 1 0 0 0 1 0 0 0 0 \n 0 0 0 0 0 0 0 0 0 0 1 0 \nRun Code Online (Sandbox Code Playgroud)\n\n验证结果:
\n\n \xe2\x86\x91\xe2\x88\xa8/a\n0 0 1\n0 0 0\n1 1 0\n0 1 0\nRun Code Online (Sandbox Code Playgroud)\n\n也可能有一种很好的方法可以使用散点索引来做到这一点,首先生成一个 3 维矩阵,然后指定 1 的位置。
\n\n是的,使用上面的 v 和 d:
\n\n n\xe2\x86\x90+/v\n b\xe2\x86\x90(n,d)\xe2\x8d\xb40\n b[\xe2\x86\x93\xe2\x8d\x89(\xe2\x8d\xb3n)\xe2\x8d\xaad\xe2\x8a\xa4v/\xe2\x8d\xb3\xe2\x8d\xb4v]\xe2\x86\x901\n b\n0 0 1\n0 0 0\n0 0 0\n0 0 0\n\n0 0 0\n0 0 0\n1 0 0\n0 0 0\n\n0 0 0\n0 0 0\n0 1 0\n0 0 0\n\n0 0 0\n0 0 0\n0 0 0\n0 1 0\n \xe2\x88\xa8\xe2\x8c\xbfb\n0 0 1\n0 0 0\n1 1 0\n0 1 0\nRun Code Online (Sandbox Code Playgroud)\n