2016-11-18 74 views
1

給定矩陣A的維數爲axa,B的維數爲bxb,axa模爲bxb == 0. B是A的子矩陣在(0,0)和平鋪直到axa的尺寸被滿足。Numpy:如何基於子矩陣B返回矩陣A的視圖

A = array([[ 0, 1, 2, 3], 
      [ 4, 5, 6, 7], 
      [ 8, 9, 10, 11], 
      [12, 13, 14, 15]]) 

一個子矩陣的一個例子可能是:

B = array([[10, 11], 
      [14, 15]]) 

其中數字15是在位置(1,1)相對於B的座標。

我怎麼能返回數組A的視圖,在B中的特定位置?例如,對於在B檔(1,1),我想從一個得到所有這些值:

C = array([[5, 7], 
      [13, 15]]) 

我希望有一個觀點究其原因,是希望以更新多個位置:

C = array([[5, 7],[13, 15]]) = 20 

結果

A = array([[ 0, 1, 2, 3], 
      [ 4, 20, 6, 20], 
      [ 8, 9, 10, 11], 
      [12, 20, 14, 20]]) 
+0

當用作''A [...] = ....'索引可以提前(在'getitem'概念時副本創建者)。 – hpaulj

回答

3

您可以獲取此如下:

>>> A = np.array([[ 0, 1, 2, 3], 
      [ 4, 5, 6, 7], 
      [ 8, 9, 10, 11], 
      [12, 13, 14, 15]]) 
>>> A[np.ix_([1,3],[1,3])] = 20 
>>> A 
array([[ 0, 1, 2, 3], 
     [ 4, 20, 6, 20], 
     [ 8, 9, 10, 11], 
     [12, 20, 14, 20]]) 

欲瞭解更多信息有關np.ix_可審查NumPy documentation

+2

爲了更清楚一點,可能值得把'[1,3]'寫成'[1,1 + len(B)]'。 –

+0

非常感謝Pedro,我不知道Numpy給了我們多少。 – user1658296