2016-03-04 42 views
-1

仅有好奇心,是有从矩阵A的方式:蟒选择子矩阵离开尺寸不变

A = [ [100, 200, 300, 400], 
     [111, 222, 333, 444], 
     [555, 666, 777, 888], 
     [500, 600, 700, 800] ] 

以获得矩阵B,看起来像以下:

B = [ [nan, nan, nan, nan], 
     [nan, 222, 333, nan], 
     [nan, 666, 777, nan], 
     [nan, nan, nan, nan] ] 

,而不使用环/周期?因为简单的裁剪明显改变前矩阵尺寸,生产:

B = A[1:3,1:3] 
>>> B = [ [222, 333], 
      [666, 777] ] 

预先感谢您。

+0

这引发类型错误,也许你的意思是numpy数组? – Goyo

+0

是的,我跳过了,但他们是np.arrays – urgeo

回答

1

创建楠的数组,然后从A

B = np.empty(A.shape) 
B[:] = np.nan 
B[1:3,1:3] = A[1:3,1:3] 
print(B) 

[[ nan nan nan nan] 
[ nan 222. 333. nan] 
[ nan 666. 777. nan] 
[ nan nan nan nan]] 
+0

是的,我结束了类似的事情......但我想知道是否有“相反”的方式来选择条目。我的意思是,“3:5”在3和5之间选择所有的值......是否有类似“3 * 5”的选择除了3和5之外的所有值? – urgeo

+0

@urgeo不是你想要的交集?然后看看我的答案 – Kordi

+0

这看起来像一个不同的问题。 – Goyo

1

分配给你想要的值想你想的交集

import numpy 

A = numpy.array([ [100, 200, 300, 400], 
     [111, 222, 333, 444], 
     [555, 666, 777, 888], 
     [500, 600, 700, 800] ]) 

B = numpy.array([ [222, 333], 
      [666, 777]]) 

C = numpy.zeros((4,4)) 
C[:] = numpy.nan 
C[1:3, 1:3] = numpy.ones((2,2)) 

print C * A 

输出是

[[ nan nan nan nan] 
[ nan 222. 333. nan] 
[ nan 666. 777. nan] 
[ nan nan nan nan]]