Как нарезать массив numpy со строками различной длины - PullRequest
1 голос
/ 26 января 2020

У меня есть numpy массив arr из numpy массивов, каждый с различной длиной. Я могу получить форму arr:

arr.shape

>>> (9,) 

Я могу получить форму одного из элементов arr:

arr[0].shape

>>> (6, 1, 2)

И я знаю, что все такие элементы иметь форму (n, 1, 2).

Я хочу нарезать arr, чтобы получить 1-мерный результат следующим образом:

arr[:,:,:,0]

Но я получаю следующую ошибку:

IndexError: too many indices for array

РЕДАКТИРОВАТЬ: Мой первоначальный вопрос вводил в заблуждение. Я хочу сделать этот срез, чтобы я мог назначить значения для среза. Таким образом, получение среза в новой переменной бесполезно для моего случая. По сути, я хочу сделать что-то вроде этого в простой вкладыш:

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

Ответы [ 2 ]

1 голос
/ 26 января 2020

Вы можете исправить свое первое (на самом деле все изменяющееся) измерение и применить свое преобразование к элементам c -образной формы 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])
1 голос
/ 26 января 2020

Вы можете использовать список понимания версию вашего решения.

desired_result = np.array([el[:,:,0] for el in arr])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...