如何使用numpy在现有的2D数组中添加2D子阵列?

时间:2014-01-09 16:35:16

标签: python arrays numpy

我在向现有2D数组添加子数组时遇到问题。 我实际上是numpy和python的新手,来自MATLAB,这是一件微不足道的事情。 请注意,在我的问题中,通常a是一个很大的矩阵。

import numpy as np

a = np.array(arange(16)).reshape(4,4) # The initial array
b = np.array(arange(4)).reshape(2,2) # The subarray to add to the initial array
ind = [0,3] # The rows and columns to add the 2x2 subarray 

a[ind][:,ind] += b #Doesn't work although does not give an error

我看到四处看看以下内容可以正常工作

a[:4:3,:4:3] += b

但我怎样才能事先定义ind? 另外如何定义ind是否包含两个以上不能用步幅表示的数字?例如ind = [1,15,34,67]

1 个答案:

答案 0 :(得分:4)

处理一般情况的一种方法是使用np.ix_

>>> a = np.zeros((4,4))
>>> b = np.arange(4).reshape(2,2)+1
>>> ind = [0,3]
>>> np.ix_(ind, ind)
(array([[0],
       [3]]), array([[0, 3]]))
>>> a[np.ix_(ind, ind)] += b
>>> a
array([[ 1.,  0.,  0.,  2.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 3.,  0.,  0.,  4.]])