【发布时间】:2018-04-23 12:04:57
【问题描述】:
尝试构建一个没有双 for 循环的 numpy 矩阵
如果我有一个矩阵:
x = [val, val, val]
[val, val, val]
[val, val, val]
我想用其他两行减去每一行的项目,同时外推到一个更大的矩阵并得到最终结果。每行减法(在本例中)是 3 个元素。 (不过我正在使用更大的矩阵)
new = [row 1 - 2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[row 1 - 3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, row 2 - 1, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, row 2 - 3, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0 row 3 - 1]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0 row 3 - 2]
然后类似,但用列代替,除了项目是水平填充的,如果有意义的话(每个项目都是单个值而不是上面)
new = [col 1 - 2, 0.0, 0.0, col 1 - 2, 0.0, 0.0, col 1 - 2, 0.0, 0.0]
[col 1 - 3, 0.0, 0.0, col 1 - 3, 0.0, 0.0, col 1 - 3, 0.0, 0.0]
[0.0, col 2 - 1, 0.0, 0.0, col 2 - 1, 0.0, 0.0, col 2 - 1, 0.0]
[0.0, col 2 - 3, 0.0, 0.0, col 2 - 3, 0.0, 0.0, col 2 - 3, 0.0]
[0.0, 0.0, col 3 - 1, 0.0, 0.0, col 3 - 1, 0.0, 0.0, col 3 - 1]
[0.0, 0.0, col 3 - 2, 0.0, 0.0, col 3 - 2, 0.0, 0.0, col 3 - 2]
如果有人有 numpy 的魔法来解决这个问题,我会失去它哈。
编辑:小矩阵的更好示例:
x = [[.5, 0.],
[.1, 1.2]]
变成
new = [[ 0.4, -1.2, 0., 0. ],
[ 0., 0., -0.4, 1.2]]
对于列版本
y = [[.2, .9],
[.6, .1]]
变成
new = [[-0.7, 0., 0.5, 0. ],
[ 0., 0.7, 0., -0.5]]
【问题讨论】:
-
你能举一个有意义的实际例子吗?有了实际数字,所以很清楚发生了什么?我不确定我是否理解你编造的符号。
-
确定我会使用 4 x 4 矩阵
-
谢谢。什么都行。
-
希望对您有所帮助,我看不到任何循环的方法,但计算需要很长时间,如果 numpy 能做点什么就太好了。
-
我怀疑你的描述。可以发在这里吗?