python选择子矩阵使维度保持不变

时间:2016-03-04 09:25:30

标签: python matrix

只是好奇心,是否有一种方法来自矩阵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] ]

提前谢谢。

2 个答案:

答案 0 :(得分:1)

创建一个nan的数组,然后从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]]

答案 1 :(得分: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]]