切片2D数组以匹配3D数组中的条目?

时间:2015-08-30 21:57:39

标签: python arrays numpy multidimensional-array

我今天的任务是正确切片2D数组,使其与3D数组中的某些条目正确匹配。例如,我有下面的3D数组:

[[[  1.06103295e+02   0.00000000e+00   0.00000000e+00]
  [  0.00000000e+00   1.06103295e+02   0.00000000e+00]
  [  0.00000000e+00   0.00000000e+00   1.06103295e+02]]

 [[  5.09297818e+05   5.09296818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09297818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09296818e+05   5.09297818e+05]]

[[  5.09297818e+05   5.09296818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09297818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09296818e+05   5.09297818e+05]]

[[  1.06103295e+02   0.00000000e+00   0.00000000e+00]
[  0.00000000e+00   1.06103295e+02   0.00000000e+00]
[  0.00000000e+00   0.00000000e+00   1.06103295e+02]]]

使用" numpy.reshape"命令,我把它改成了一个尺寸为(12,3)的二维数组。

[[  1.06103295e+02   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   1.06103295e+02   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   1.06103295e+02]
 [  5.09297818e+05   5.09296818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09297818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09296818e+05   5.09297818e+05]
 [  5.09297818e+05   5.09296818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09297818e+05   5.09296818e+05]
 [  5.09296818e+05   5.09296818e+05   5.09297818e+05]
 [  1.06103295e+02   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   1.06103295e+02   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   1.06103295e+02]]

现在我如何对此进行切片以便获得与上述形式相同的条目?

例如,我已经将其中一个条目切成了这样:

M11 = myarrayname[0:3, 0:3]

我得到了结果:

[[ 106.10329539    0.            0.        ]
 [   0.          106.10329539    0.        ]
 [   0.            0.          106.10329539]]

请注意,这与上面3D数组中的一个块相同(减去科学记数法)。如何保持切片条目以从上面的3D数组中获取其他3个块?

当我试图做M12 = myarrayname [4:6,4:6]时,

我只是得到一个空数组。

1 个答案:

答案 0 :(得分:0)

您可以再次使用np.reshape(如果A是您的数组):

B = np.reshape(A, (12, 3))
C = np.reshape(B, (4, 3, 3))

但如果你自己选择阵列,那么:

M11 = B[0:3, 0:3]
M12 = B[3:6, 0:3]
M13 = B[6:9, 0:3]
M14 = B[9:12, 0:3]