在运行时切片

Teb*_*bas 3 python numpy

谁能解释我如何在运行时切片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]]
Run Code Online (Sandbox Code Playgroud)

而我丑陋的 dynSlicing():

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]]
Run Code Online (Sandbox Code Playgroud)

Resize()不会完成这项工作,因为它会在删除元素之前展开数组.

谢谢,Tebas

for*_*ran 6

传递切片对象的元组可以完成这项任务:

def dynSlicing(data, targetsize):
    return data[tuple(slice(x) for x in targetsize)]
Run Code Online (Sandbox Code Playgroud)