2012-12-05 162 views
2

我是最近移民到Python世界。我需要弄清楚如何在Python中将矩阵复制到更大的矩阵。让我来说明这一点与Matlab中的例子:如何在Python中将矩阵复制到更大的矩阵?

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的Python的类似的事情。

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循环的方式吗?

回答

4

这里的问题:

A[0:1,0:1] = B 

你想:

A[0:2,0:2] = B 

为什么?因为Python使用半开范围。所以分片[0:1]是半开范围[0, 1),意思就是索引0;切片[0:2]是半开范围[0, 2),这意味着索引01

+0

谢谢!这解决了我的问题。 –

+0

NumPy用户指南应该有一个关于“要知道你是否来自XXX的东西”的章节...... – abarnert

+0

他们真的应该这样做。这对我来说当然不是显而易见的! –