【问题标题】:numpy array slicing with arbitrary dimension任意维度的numpy数组切片
【发布时间】:2013-10-26 17:42:41
【问题描述】:

假设我创建了一个任意维度 (n) 的数组。

#assign the dimension

>>> n=22

#create the numpy array

>>> TheArray=zeros([2]*n)

>>> shape(TheArray)

(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

有一些代码(在本例中跳过)来填充数组的值。

现在,尝试访问数组的一些值

>>> TheArray[0:2,0:2,0:2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

array([[[ 0.,  0.],
        [ 0.,  0.]],

       [[ 0.,  0.],
        [ 0.,  0.]]])

如何使0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0部分语法泛化为n?

【问题讨论】:

    标签: python numpy dimension


    【解决方案1】:

    一种方法是使用numpy.s_:

    In [55]: m = arange(2**6).reshape([2]*6)
    
    In [56]: m.shape
    Out[56]: (2, 2, 2, 2, 2, 2)
    
    In [57]: m[:2,:2,:2,0,0,0]
    Out[57]: 
    array([[[ 0,  8],
            [16, 24]],
    
           [[32, 40],
            [48, 56]]])
    
    In [58]: m[s_[:2, :2, :2] + (0,)*(n-3)]
    Out[58]: 
    array([[[ 0,  8],
            [16, 24]],
    
           [[32, 40],
            [48, 56]]])
    

    我猜你可以摆脱硬编码的 -3..

    In [69]: m[(s_[:2, :2, :2] + (0,)*m.ndim)[:m.ndim]]
    Out[69]: 
    array([[[ 0,  8],
            [16, 24]],
    
           [[32, 40],
            [48, 56]]])
    

    但老实说,如果需要的话,我可能会将其封装在一个函数中。

    【讨论】:

    • 谢谢。 python 和 numpy 文档不够清楚,无法得出这个结论,但是在提供了您的示例之后,我能够将 python 和 numpy 文档拼凑起来以理解这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2023-03-23
    • 2017-12-24
    • 2019-09-18
    • 2015-01-29
    • 2021-11-23
    相关资源
    最近更新 更多