首页 > 解决方案 > numpy 3d数组中的for循环

问题描述

我想采用这样的基本 3d 数组:

b = np.arange(1,101).reshape(4,5,5)
b

然后我想拿第一个索引,像楼梯一样向下工作。

b1 = [b[0:,0,0],b[0:,1,1],b[0:,2,2],b[0:,3,3],b[0:,4,4]]
b1 = np.asarray(b1)
b1 = np.transpose(b1)
b1

上面的代码看起来不正确,我宁愿使用循环。这是我到目前为止所拥有的:

for i in range(0,5):
    b2 = b[0:,i,i]
    b2 = np.asarray(b2)
    b2 = b2.reshape(4,1)
    print(b2)

我对上述输出的问题是将每次迭代放入一个垂直数组中,然后移至下一个。如何使上述代码输出类似于我的第二个代码块?

抱歉格式不佳,stackoverflow 新手,刚开始学习代码/numpy。

谢谢!

标签: pythonarraysnumpynumpy-slicing

解决方案


另一种方法(大概在你的楼梯上,b最后两个维度必须是方形):

c = b[:,np.arange(b.shape[1]),np.arange(b.shape[2])]
b2 = c.T.reshape(c.shape+(1,))

输出:

[[[  1]
  [ 26]
  [ 51]
  [ 76]
  [  7]]

 [[ 32]
  [ 57]
  [ 82]
  [ 13]
  [ 38]]

 [[ 63]
  [ 88]
  [ 19]
  [ 44]
  [ 69]]

 [[ 94]
  [ 25]
  [ 50]
  [ 75]
  [100]]]

推荐阅读