ValueError: не удалось передать входной массив из формы (13,41) в форму (13) - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь использовать библиотеку tslearn для анализа аудиофайлов. Файл имеет строку 45 КБ (45 КБ аудиосэмплов) и 1 столбец, но у каждой строки есть вложенный объект (N, 13). Таким образом, длина каждого образца различна, а функции одинаковы (13 функций). Я хочу растянуть их до 93 рядов, что означает, что если я напечатаю форму любого из них, он вернется (93,13).

пример данных: первый вложенный объект в наборе данных, форма (43,13) enter image description here

второй вложенный объект в наборе данных, форма (30,13) enter image description here

Я пытался использовать эту библиотеку tslearn: https://tslearn.readthedocs.io/en/latest/gen_modules/preprocessing/tslearn.preprocessing.TimeSeriesResampler.html#tslearn.preprocessing.TimeSeriesResampler

но это только изменит столбец вместо строки. так что в основном, если у меня есть массив (44,13), он изменит форму массива на (44,93) вместо (93.13). Поэтому я попытался повернуть массив на 90 градусов и повторить анализ, но так как сам набор данных является только 1D с вложенным объектом 45K, мне пришлось создать пустой список, использовать цикл for, чтобы вынуть каждый объект, повернуть их на 90 градусов и вернуть их в список. Затем я попытался изменить список обратно на массив, так как tslearn.preprocessing.TimeSeriesResampler принимает массив только в качестве параметров. Однако он говорит мне, что «ValueError: не удалось передать входной массив из shape (13,41) в shape (13)» при попытке перенести список обратно в массив.

import numpy as np
spoken_train = np.load("spoken_train.npy", allow_pickle=True) 
lis = []
  for i in range(len(spoken_train)):
  lis.append(np.rot90(spoken_train[i])) 
myarray = np.asarray(lis)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-65-440f2eba9eba> in <module>
      2 for i in range(len(spoken_train)):
      3     lis.append(np.rot90(spoken_train[i]))
----> 4 myarray = np.asarray(lis)

/anaconda3/lib/python3.7/site-packages/numpy/core/numeric.py in asarray(a, dtype, order)
    536 
    537     """
--> 538     return array(a, dtype, copy=False, order=order)
    539 
    540 

ValueError: could not broadcast input array from shape (13,41) into shape (13)

Что мне делать? Если есть более простой способ поворота вложенного массива, пожалуйста, дайте мне знать. Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 мая 2019
lis = np.copy(z) #since they have the same number of arrays
for i in range(len(spoken_train)):
  lis[i] = np.rot90(spoken_train[i])
0 голосов
/ 24 мая 2019

Соответствует ли это счету:

lis = []
for i in range(len(spoken_train)):
    item = spoken_train[i]
    lis.append( item + np.zeros((1,item.shape[-1])))
myarray = np.concatenate(lis) 

Хотя item в цикле должно иметь одинаковое количество столбцов.Согласно вашим примерам, все массивы в spoken_train должны иметь последнее измерение 13.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...