2017-04-18 41 views

回答

2

随着numpy,您可以使用一系列指标。假设您有一个列表x[](单维),您可以将其索引为x[start:end],这称为切片。

片可以用更高的维度中使用太像

x[start1:end1][start2:end2][start3:end3] 

这可能是你在找什么。

虽然记住这不会产生一个新的数组(即它不会复制)。对此的更改将反映到x

1

从您链接到的问题,它只是在代码中的小变化:

def crop_center(img,cropx,cropy): 
    y,x,c = img.shape 
    startx = x//2 - cropx//2 
    starty = y//2 - cropy//2  
    return img[starty:starty+cropy, startx:startx+cropx, :] 

所有已添加了另一个:到最后一行的末尾,和(未使用)c到形状拆包。

>>> img 
array([[[ 18, 1, 17], 
     [ 1, 13, 3], 
     [ 2, 17, 2], 
     [ 5, 9, 3], 
     [ 0, 6, 0]], 

     [[ 1, 4, 11], 
     [ 7, 9, 24], 
     [ 5, 1, 5], 
     [ 7, 3, 0], 
     [116, 1, 55]], 

     [[ 1, 4, 0], 
     [ 1, 1, 3], 
     [ 2, 11, 4], 
     [ 20, 3, 33], 
     [ 2, 7, 10]], 

     [[ 3, 3, 6], 
     [ 47, 5, 3], 
     [ 4, 0, 10], 
     [ 2, 1, 35], 
     [ 6, 0, 1]], 

     [[ 2, 9, 0], 
     [ 17, 13, 4], 
     [ 3, 0, 1], 
     [ 16, 1, 3], 
     [ 19, 4, 0]], 

     [[ 8, 19, 3], 
     [ 9, 16, 7], 
     [ 0, 12, 2], 
     [ 4, 68, 10], 
     [ 4, 11, 1]], 

     [[ 0, 1, 14], 
     [ 0, 0, 4], 
     [ 13, 1, 4], 
     [ 11, 17, 5], 
     [ 7, 0, 0]]]) 
>>> crop_center(img,3,3) 
array([[[ 1, 1, 3], 
     [ 2, 11, 4], 
     [20, 3, 33]], 

     [[47, 5, 3], 
     [ 4, 0, 10], 
     [ 2, 1, 35]], 

     [[17, 13, 4], 
     [ 3, 0, 1], 
     [16, 1, 3]]]) 
0

numpy的适用于任何尺寸

import numpy as np 
X = np.random.normal(0.1, 1., [10,10,10]) 
X1 = X[2:5, 2:5, 2:5] 
print(X1.shape) 

最后打印语句导致[3,3,3]数组。