Распаковать последовательности из массива Numpy

У меня есть массив numpy, в котором элементы представляют собой последовательности, например:

freq_chan = [  1.00000000e-01   1.88670219e-01  -7.54695562e-03   2.62096706e-13
  -2.13348799e-14   1.03343348e+00  -4.13380390e-02   2.62973944e-02
  -1.05194953e-03   3.40951940e-13  -2.68000220e-14   1.44764659e+00
  -5.79069851e-02  -1.65709468e-01   6.62852413e-03  -3.55350204e-14
   3.45455226e-15   7.39936927e-01  -2.95981613e-02]
[  2.99900000e-01   1.88684850e-01  -7.54812794e-03   2.42380739e-12
  -1.94552116e-13   1.03357295e+00  -4.13492157e-02   2.63081045e-02
  -1.05280780e-03   2.96306692e-12  -2.36910642e-13   1.44787002e+00
  -5.79248893e-02  -1.65738440e-01   6.63084580e-03  -4.40512728e-13
   3.59021896e-14   7.40073244e-01  -2.96090852e-02]

Однако предполагается, что каждый элемент последовательности является элементом основной матрицы, например

freq_chan = [  1.00000000e-01   1.88670219e-01  -7.54695562e-03   2.62096706e-13 -2.13348799e-14   1.03343348e+00  -4.13380390e-02   2.62973944e-02 -1.05194953e-03   3.40951940e-13  -2.68000220e-14   1.44764659e+00 -5.79069851e-02  -1.65709468e-01   6.62852413e-03  -3.55350204e-14 -5.79069851e-02  -1.65709468e-01   6.62852413e-03  -3.55350204e-14 3.45455226e-15   7.39936927e-01  -2.95981613e-02]

Так, например, freq_chan[0,1] должен возвращать 1.88670219e-01. Прямо сейчас freq_chan[0,2] возвращает ошибку:

    print(freq_chan[0,2])
    TypeError: list indices must be integers, not tuple.

Этот массив Numpy создается из списка кортежей Python с использованием кода:

for i,j in enumerate(freq_chan):
    freq_chan[i] = np.array(freq_chan[i], dtype = float)

Есть ли способ создать этот массив Numpy, чтобы элементы кортежей были распакованы?

Спасибо


person Afzal    schedule 09.10.2015    source источник
comment
Вы уверены, что freq_chan - это np.array?   -  person P. Camilleri    schedule 09.10.2015
comment
Не следует np.array(freq_chan_unfolded[i], dtype = float) превращать его в массив numpy   -  person Afzal    schedule 09.10.2015
comment
Я говорю не о freq_chan_unfolded, а о freq_chan.   -  person P. Camilleri    schedule 09.10.2015
comment
freq_chan_unfolded должен быть freq_chan. Посмотреть отредактированный комментарий   -  person Afzal    schedule 09.10.2015
comment
да, извините, freq_chan[0,1]   -  person Afzal    schedule 09.10.2015
comment
Кроме того, ваше определение freq_chan неясно, не хватает некоторых скобок?   -  person P. Camilleri    schedule 09.10.2015
comment
Просто выполните np.asarray(freq_chan) или np.array(freq_chan), а затем проиндексируйте?   -  person Divakar    schedule 09.10.2015


Ответы (1)


Прямо сейчас freq_chan - это не np.array, а список массивов np (отсюда и ваша ошибка: вы не можете индексировать список с кортежами). Вне вашего цикла вы должны сделать freq_chan = np.array(freq_chan); тогда freq_chan будет 2D np.array, и вы сможете проиндексировать его с помощью [0, 1].

Обратите внимание, что в моем примере тип a не меняется:

In[52]: a = [[ 0, 1], [2, 3]]

In[51]: type(a)
Out[51]: list  

In[52]: for i in range(len(a)):
            a[i] = np.array(a[i])

        type(a)
Out[52]: list

In[53]: a[0, 1]
Traceback (most recent call last):

  File "<ipython-input-55-e56b75b8ad1b>", line 1, in <module>
    a[0, 1]

TypeError: list indices must be integers, not tuple


In[54]: a = np.array(a)

In[55]: a[0, 1]
Out[55]: 1
person P. Camilleri    schedule 09.10.2015
comment
Я пытался распаковать элементы как f=np.zeros((len(freq_chan),10)) для i,j в enumerate(freq_chan): для x,y в enumerate(j): f[i,x] = float(y) Но возвращает ошибку: f[i,x] = y index 10 выходит за границы для оси 1 с размером 10 - person Afzal; 10.10.2015
comment
Ну это другой вопрос. Если мой вопрос решил вашу предыдущую проблему, отметьте его как принятый и задайте новый вопрос. - person P. Camilleri; 11.10.2015
comment
Да, для i,j в enumerate(freq_chan): для x,y в enumerate(j): f[i,x] = float(y) отсортирована распаковка массивов. Единственное, моя длина f была неправильной, - person Afzal; 13.10.2015