如何切片长度可变的numpy数组

时间:2020-01-26 12:59:32

标签: python numpy

我有一个numpy数组arr,其中每个numpy数组的长度都不同。我可以得到arr的形状:

arr.shape

>>> (9,) 

我可以得到arr元素之一的形状:

arr[0].shape

>>> (6, 1, 2)

我知道所有这些元素的形状均为(n, 1, 2)

我想对arr进行切片,以获得如下的一维结果:

arr[:,:,:,0]

但是出现以下错误:

IndexError: too many indices for array

编辑:我最初的问题是令人误解的。我想做这个切片,以便可以 assign 值到切片。因此,将切片放入新变量中对我的情况没有用。本质上,我想在一个简单的衬里中执行以下操作:

arr[:,:,:,0] = arr[:,:,:,0] - np.min(arr[:,:,:,0])

2 个答案:

答案 0 :(得分:1)

您可以使用解决方案的列表理解版本。

desired_result = np.array([el[:,:,0] for el in arr])

答案 1 :(得分:1)

您可以固定第一个(实际上是所有不同的)维,然后对arr的静态元素应用转换。

import numpy as np
from random import randint

arr=np.array([np.random.randint(3,15, size=(randint(3,9),randint(3,7),randint(6,19))) for el in range(9)])

print(arr.shape)
print(arr[0].shape)
for i in range(arr.shape[0]):
    arr[i][:,:,0]-=arr[i][:,:,0].min()
    print(arr[i][:,:,0])