在Python

时间:2018-04-21 13:45:16

标签: python-3.x multidimensional-array

我刚刚从MATLAB进入python3。所以我的问题可能很愚蠢,虽然我深入研究了这个问题,但无法找到问题的解决方案。所以这是我的问题 - 我使用

创建了一个3d数组列表
routine_matrix = [[[0 for k in range(xaxis)] for j in range(yaxis)] for i in range(zaxis)]
routine_matrix[0][0][1] = 'aa'
routine_matrix[1][0][1] = 'bb'
routine_matrix[2][0][1] = 'cc'
routine_matrix[3][0][1] = 'dd'
routine_matrix[4][0][1] = 'ee'
routine_matrix[0][1][1] = 'ff'
routine_matrix[0][2][1] = 'gg'

这就是3d列表的样子:

[[[0, 'aa', 0, 0], [0, 'ff', 0, 0], [0, 'gg', 0, 0]],
 [[0, 'bb', 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
 [[0, 'cc', 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
 [[0, 'dd', 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
 [[0, 'ee', 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]

现在,如果我想访问元素'aa','bb','cc','dd'和'ee',使用for循环我可以使用以下代码轻松完成:

for i in range(0,5):
    print(routine_matrix[i][0][1])

但是,我想做的是,我想一次性从3D列表切片 - 如:

print(routine_matrix[0:,0,1])

然而,我没有得到我想要的输出。所以我要问的是如何一次切掉'aa','bb','cc','dd'和'ee'。

谢谢你的时间!

1 个答案:

答案 0 :(得分:2)

也许您找到了答案,但是无论如何,这是我的答案:

在3d数组中,切片语法用[矩阵,行,列]表示

import numpy as np

# Below we are creating a 3D matrix similar to your matrix where there are 
# 5 matrices each containing 3 rows and 4 columns

routine_matrix = np.arange(5*3*4).reshape((5,3,4))
print(routine_matrix) 

routine_matrix:

[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]

 [[24 25 26 27]
  [28 29 30 31]
  [32 33 34 35]]

 [[36 37 38 39]
  [40 41 42 43]
  [44 45 46 47]]

 [[48 49 50 51]
  [52 53 54 55]
  [56 57 58 59]]]

现在,根据您的问题,您对每个内部矩阵的第0行第1列的第一个元素1,2,13,25,37,49感兴趣

因此,为了实现这一目标

print(routine_matrix[:, 0, 1])

在这里了解切片:

  • ':'表示选择所有矩阵
  • “ 0”表示仅选择所有矩阵的第0行
即:[0 1 2 3],[12、13、14、15],[24、25、26、27],[36、37、38、39],[48、49、50、51 ]

  • '1'表示,在上面选择的所有行中,只需选择第一列(Python中的数组索引从0开始)

即:[1、13、25、37、49]

因此输出:

[ 1 13 25 37 49]

在您的情况下,它将为['aa''bb''cc'dd'ee']