изменить массив ошибок массива: *** IndexError: индекс кортежа вне диапазона - PullRequest
0 голосов
/ 31 августа 2018

У меня есть массив или массивы с именем my_data, такие что: размерность (my_data) = [96,18,36,36,3] типа <type 'numpy.ndarray'>

однако, my_data.shape возвращает (96,), но я ожидаю получить (96,18,36,36,3). После этого я попытался my_data[0].shape, который возвращает (18,) вместо (18,36,36,3) и, наконец, my_data[0][0].shape возвращает (36,36,3).

Мне интересно, почему я не обретаю форму (96,18,36,36,3)

Зачем мне это нужно?

Я хотел бы изменить my_data на (96,18,36*36*3)

Что пробовал?

my_data=my_data.reshape(my_data.shape[0],my_data.shape[1],my_data.shape[2]*my_data.shape[3]*my_data.shape[4])

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

 *** IndexError: tuple index out of range

1 Ответ

0 голосов
/ 31 августа 2018

Я даже не уверен, как вы попали на np.array, содержащий np.array с внутри. Однако, простое приведение должно исправить это, если данные выровнены, например:

import numpy as np

x = [np.random.randint(1, 100, (2, 3, 4)) for _ in range(2 * 3)]
x = np.array(x)
x.shape
# (6, 2, 3, 4)

Если данные не выровнены, вы должны сначала выровнять их:

import numpy as np
x = [np.random.randint(1, 100, (2, 3, np.random.randint(1, 5))) for _ in range(2 * 3)]
print([y.shape for y in x])
# [(2, 3, 2), (2, 3, 1), (2, 3, 1), (2, 3, 4), (2, 3, 1), (2, 3, 1)]
# x = np.array(x) will cause ValueError...


def zero_padding(arr, shape):
    result = np.zeros(shape, dtype=arr.dtype)
    mask = tuple(slice(None, d) for d in arr.shape)
    result[mask] = arr
    return result


x = [zero_padding(y, (2, 3, 4)) for y in x]
x = np.array(x)
x.shape
# (6, 2, 3, 4)

Примечание: более сложная версия этого zero_padding() предоставляется NumPy's pad() или FlyingCircus num.reframe().

Отказ от ответственности: я являюсь основным автором FlyingCircus.

...