我是最近移植到Python世界的移民。我需要弄清楚如何在Python中将矩阵复制到更大的矩阵。让我用Matlab中的一个例子说明这一点:
A = randn(4,4);
B = eye(2,2);
A(1:2,1:2) = B
给出
A =
1.0000 0 3.5784 0.7254
0 1.0000 2.7694 - 0.0631
-2.2588 - 0.4336 - 1.3499 0.7147
0.8622 0.3426 3.0349 - 0.2050
我正在尝试使用NumPy以类似的方式使用NumPy。
A = np.random.randn(4,4)
B = np.eye(2,2)
A[0:1,0:1] = B
给出
ValueError: output operand requires a reduction, but reduction is not enabled.
当然,避免这种情况的最简单方法是使用循环,但我想保持它的矢量化。
有人可以指点我这样做而不使用for循环吗?
答案 0 :(得分:4)
问题在于:
A[0:1,0:1] = B
你想:
A[0:2,0:2] = B
为什么呢?因为Python使用半开放范围。因此,切片[0:1]
是半开放范围[0, 1)
,仅表示索引0
;切片[0:2]
是半开放范围[0, 2)
,表示索引0
和1
。