【发布时间】:2021-09-27 17:07:04
【问题描述】:
给定一个矩阵 S 和一个二进制矩阵 W,我想创建一个 S 的子矩阵,对应于 W 的非零坐标。
例如:
S = [[1,1],[1,2],[1,3],[1,4],[1,5]]
W = [[1,0,0],[1,1,0],[1,1,1],[0,1,1],[0,0,1]]
我想得到矩阵
S_1 = [[1,1],[1,2],[1,3]]
S_2 = [[1,2],[1,3],[1,4]]
S_3 = [[1,3],[1,4],[1,5]]
我想不出在 python 中执行此操作的巧妙方法。我能为每个 S_i 做的最好的事情是
S_1 = S[0,:]
for i in range(np.shape(W)[0]):
if W[i, 0] == 1:
S_1 = np.vstack((S_1, S[i, :]))
但如果我想改变问题的维度并拥有 100 个 S_i,那么为每个 S_i 编写一个 for 循环似乎有点难看。 (旁注:S_1 应该初始化为一些空的二维数组,但我无法让它工作,所以将它初始化为 S[0,:] 作为占位符)。
编辑:澄清我的意思:
我有一个矩阵 S
1 1
1 2
1 3
1 4
1 5
我有一个二进制矩阵
1 0 0
1 1 0
1 1 1
0 1 1
0 0 1
给定二元矩阵W的第一列
1
1
1
0
0
1 位于第一、第二和第三位。所以我想用每列的第一、第二和第三个位置创建一个对应的S子矩阵,所以S_1(对应W的第一列)是
1 1
1 2
1 3
同样,如果我们看一下 W 的第三列
0
0
1
1
1
1 在最后三个坐标中,所以我想要一个 S 的子矩阵,其中只有每列的最后三个坐标,称为 S_3
1 3
1 4
1 5
因此,给定二进制矩阵的任何第 i 列,我希望生成一个子矩阵 S_i,其中 S_i 的列包含 S 的列,但只有与第 i 列中 1 的位置相对应的条目二进制矩阵。
【问题讨论】:
-
我不明白你在做什么。 W 中有 5 个条目,但您只显示 3 个输出矩阵。每个 W 行中只有 3 个条目,您如何在 S 中的 5 个条目之间进行选择?
numpy可以做间接寻址,但我们需要了解你想要什么。 -
抱歉,我编辑了问题以澄清我的意思。用这种方式表达是否更有意义?