Как разбить список на массив numpy? - PullRequest
0 голосов
/ 23 мая 2019

Основной вопрос о заполнении массивов np из списка:

m - массив массивов с формой (4 486,9).

d - это список длиной 23328 и различным количеством элементов для каждого индекса.

Я перебираю m в измерении 1 и 2 и d в измерении 1.

Я хочу импортировать 9 "столбцов" из определенных строк d с постоянными интервалами в m. 6 из этих столбцов являются последовательными, они показаны ниже с индексом "some_index".

То, что я сделал ниже, работает хорошо, но выглядит очень тяжело в синтаксисе и просто неправильно. Должен быть способ экспортировать последовательные столбцы более эффективно?

import numpy as np
m=np.empty(4,486,9)
d=[] #list filled in from files
#some_index is an integer incremented in the loops following some        conditions
#some_other_index is another integer incremented in the loops following some other conditions
For i in something:
    For j in another_thing:
        m[i][j]=[d[some_index][-7], d[some_index][-6], d[some_index][-5], d[some_index][-4], d[some_index][-3], d[some_index][-2], d[some_other_index][4], d[some_other_index][0], d[some_other_index][4]]

Без особого воображения я попробовал следующее, которое не работает, так как массиву np нужна кома для различения элементов:

For i in something:
    For j in another_thing:
        m[i][j]=[d[some_index][-7:-1], d[some_other_index][4], d[some_other_index][0], d[some_other_index][4]]
ValueError: setting an array element with a sequence.

        m[i][j]=[np.asarray(d[some_index][-7:-1]), d[some_other_index][4], d[some_other_index][0], d[some_other_index][4]]
ValueError: setting an array element with a sequence.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 23 мая 2019

Это то, что вы ищете?

Вы можете использовать числовые массивы для выбора нескольких элементов одновременно.

Я позволил себе создать некоторые данные, чтобы убедиться, что мы поступаем правильно

import numpy as np
m=np.zeros((4,486,9))
d=[[2,1,2,3,1,12545,45,12], [12,56,34,23,23,6,7,4,173,47,32,3,4], [7,12,23,47,24,13,1,2], [145,45,23,45,56,565,23,2,2],
   [54,13,65,47,1,45,45,23], [125,46,5,23,2,24,23,5,7]] #list filled in from files
d = np.asarray([np.asarray(i) for i in d]) # this is where the solution lies
something = [2,3]
another_thing = [10,120,200]
some_index = 0
some_other_index = 5
select_elements = [-7,-6,-5,-4,-3,-2,4,0,4] # this is the order in which you are selecting the elements

for i in something:
    for j in another_thing:
        print('i:{}, j:{}'.format(i, j))
        m[i,j,:]=d[some_index][select_elements]

Кроме того, я заметил, что вы индексировали таким образом m[i][j] = .... Вы можете сделать то же самое с m[i,j,:] = ...

...