代码之家  ›  专栏  ›  技术社区  ›  Tebas

运行时切片

  •  3
  • Tebas  · 技术社区  · 15 年前

    有人能告诉我如何在运行时切片numpy.array吗? 我不知道“编码时间”的等级(维数)。

    最简单的例子:

    import numpy as np
    a = np.arange(16).reshape(4,4) # 2D matrix
    targetsize = [2,3] # desired shape
    
    b_correct = dynSlicing(a, targetsize)
    b_wrong = np.resize(a, targetsize)
    
    print a
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]]
    print b_correct
    [[0 1 2]
     [4 5 6]]
    print b_wrong
    [[0 1 2]
     [3 4 5]]
    

    还有我的 丑陋的 DySLIGIN():

    def dynSlicing(data, targetsize):
        ndims = len(targetsize)
    
        if(ndims==1):
            return data[:targetsize[0]],
        elif(ndims==2):
            return data[:targetsize[0], :targetsize[1]]
        elif(ndims==3):
            return data[:targetsize[0], :targetsize[1], :targetsize[2]]
        elif(ndims==4):
            return data[:targetsize[0], :targetsize[1], :targetsize[2], :targetsize[3]]
    

    resize()将不执行此操作,因为它在删除元素之前使数组变平。

    谢谢, 特巴斯

    3 回复  |  直到 15 年前
        1
  •  6
  •   fortran    15 年前

    传递切片对象的元组会执行以下操作:

    def dynSlicing(data, targetsize):
        return data[tuple(slice(x) for x in targetsize)]
    
        2
  •  2
  •   Charles Beattie    15 年前

    简单解决方案:

    b = a[tuple(map(slice,targetsize))]
    
        3
  •  1
  •   Thomas Ahle    15 年前

    您可以直接“更改”它。这是因为数组的性质只允许背景。

    相反,您可以复制一个部分,或者更好地创建所需形状的视图: http://www.scipy.org/Tentative_NumPy_Tutorial#head-1529ae93dd5d431ffe3a1001a4ab1a394e70a5f2