【问题标题】:How to iterate through slices at the last dimension如何遍历最后一维的切片
【发布时间】:2020-04-14 04:52:02
【问题描述】:

例如,你有数组

a = np.array([[[ 0,  1,  2],
               [ 3,  4,  5]],

              [[ 6,  7,  8],
               [ 9, 10, 11]]])

我们想要遍历最后一个维度的切片,即 [0,1,2]、[3,4,5]、[6,7,8]、[9,10,11]。有什么方法可以在没有 for 循环的情况下实现这一目标?谢谢!

试过这个但它不起作用,因为 numpy 没有按照我们想要的方式解释元组 - a[(0, 0),:]a[0, 0, :] 不同

[a[i,:] for i in zip(*product(*(range(ii) for ii in a.shape[:-1])))]

更一般地说,最后 k 维有什么办法吗?相当于循环通过a[i,j,k, ...]

【问题讨论】:

    标签: numpy numpy-ndarray


    【解决方案1】:
    In [26]: a = np.array([[[ 0,  1,  2], 
        ...:                [ 3,  4,  5]], 
        ...:  
        ...:               [[ 6,  7,  8], 
        ...:                [ 9, 10, 11]]])                                                                
    In [27]: [a[i,j,:] for i in range(2) for j in range(2)]                                                
    Out[27]: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10, 11])]
    

    In [31]: list(np.ndindex(2,2))                                                                         
    Out[31]: [(0, 0), (0, 1), (1, 0), (1, 1)]
    In [32]: [a[i,j] for i,j in np.ndindex(2,2)] 
    

    另一个

    list(a.reshape(-1,3))
    

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 2013-06-25
      • 2014-04-02
      • 2023-02-02
      • 1970-01-01
      • 2015-11-14
      • 2018-12-14
      • 2020-06-09
      • 1970-01-01
      相关资源
      最近更新 更多