vvx
vvx

Reputation: 35

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

I am trying to use tslearn library to analyze an audio numpy file. The file has a 45K row (45K audio samples) and 1 column, but each row has a nested object of (N,13). So the length of each sample is different while the features are the same (13 features). I want to stretch them all to 93 rows, which means if I print the shape of any of them, it will return (93,13).

data example: first nested object in the dataset, shape (43,13) enter image description here

second nested object in the dataset, shape (30,13) enter image description here

I tried to use this tslearn library: https://tslearn.readthedocs.io/en/latest/gen_modules/preprocessing/tslearn.preprocessing.TimeSeriesResampler.html#tslearn.preprocessing.TimeSeriesResampler

but it will only change the column instead of the row. so basically if I have an array that is (44,13), it will change the array shape to (44,93) instead of (93.13). So I tried to rotate the array for 90 degrees and redo the analysis, but since the dataset itself is only 1D with 45K nested object, I had to make an empty list, use for loop to take out each object, rotate them 90 degrees and put them back to the list. Then I tried to change the list back to an array since the tslearn.preprocessing.TimeSeriesResampler only accepts array as parameters. However, it tells me that 'ValueError: could not broadcast input array from shape (13,41) into shape (13)' while trying to transfer the list back to an array.

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)

What should I do? If there is any easier way to rotate the nested array, please let me know as well. Thank you!

Upvotes: 0

Views: 2347

Answers (2)

Aly Hosny
Aly Hosny

Reputation: 827

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])

Upvotes: 0

Tu Bui
Tu Bui

Reputation: 1692

Does this fit the bill:

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) 

The item in the loop must have same number of columns though. According to your examples, all arrays in spoken_train must have the last dimension of 13.

Upvotes: 1

Related Questions