我想要一个矩阵并修改它的块。例如,对于4x4矩阵,{1,2},{1,2}块位于左上象限(下面的[0,1; 4,5])。如果我们重新排列矩阵使得{4,1},{4,1}块是左上象限,所以第4行/列在位置1和位置2的第1位。在Python中修改块矩阵
让我们制作这样一个4x4矩阵:
a = np.arange(16).reshape(4, 4)
print(a)
## [[ 0 1 2 3]
## [ 4 5 6 7]
## [ 8 9 10 11]
## [12 13 14 15]]
选择的块,在那里我指定我事先想这行/列的现在的一种方式,如下:
C=[3,0]
a[[[C[0],C[0]],[C[1],C[1]]],[[C[0],C[1]],[C[0],C[1]]]]
## array([[15, 12],
## [ 3, 0]])
这里的另一种方式:
a[C,:][:,C]
## array([[15, 12],
## [ 3, 0]])
然而,如果我有一个2x2的阵列,称之为B,设置
a[C,:][:,C]=b
不工作,但
a[[[C[0],C[0]],[C[1],C[1]]],[[C[0],C[1]],[C[0],C[1]]]]=b
一样。
这是为什么?这是第二种可能性最高的方法吗?谢谢!
如果C是一个numpy数组,那么'a [C [:,None],C]'也可以。 – 2015-02-18 00:55:44
Ashwini:当我尝试我得到'TypeError:列表索引必须是整数,而不是元组'? – user65257 2015-02-18 01:11:45
你想'a [np.ix_(C,C)] = b' – 2015-02-18 01:12:01