Разделение массива в python на подмассивы - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть массив от 1 до> 160. Я хочу разбить его на 10 массивов, которые разбиваются каждые шестнадцать чисел. Это то, что у меня есть:

amplitude=[]
for i in range (0,160):
    amplitude.append(i+1)

print(amplitude)


#split arrays up into a line for each sample
traceno=10                  #number of traces in file
samplesno=16               #number of samples in each trace. This wont change.

amplitude_split=np.zeros((traceno,samplesno) ,dtype=np.int) 


#fill in the arrays with amplitude/sample numbers
for i in range(len(amplitude)):             
    for j in range(traceno):                
        for k in range(samplesno):          
            amplitude_split[j,k]=amplitude[i]  

print(amplitude_split[1,:])

В качестве вывода я получаю только [160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160] Где мне нужно что-то вроде:

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]

[17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32] et c ...

Ответы [ 3 ]

2 голосов
/ 15 апреля 2020

Вы вложили петли. Таким образом, вы последовательно заполняете новый массив тем же номером, что и в первом, и заканчиваете последним, повторяемым везде 160.

Вам нужно только скопировать список в массив 1D numpy, и затем измените его:

amplitude_split=np.array(amplitude, dtype=np.int).reshape((traceno,samplesno))
1 голос
/ 15 апреля 2020

Ну, если мы используем Numpy массивы, мы можем использовать Numpy функциональность:

amplitude = np.arange(1, 161)
amplitude_split = amplitude.reshape(10, 16)

В противном случае, вы уже были связаны с как это сделать для простого списки , но я хотел бы отметить, что вам все еще не нужно все oop, чтобы заполнить amplitude в первую очередь:

amplitude = list(range(1, 161))

В В общем, с Python вы должны изо всех сил , а не думать с точки зрения того, чтобы начать с изначально пустой «области хранения», которую вы затем заполняете. Просто создайте нужные данные напрямую - путем преобразования Сортировка выше, по списку и т. д. c., или, если необходимо, .append() ing - вместо перезаписи фиктивного значения.

0 голосов
/ 15 апреля 2020

См. Группер в https://docs.python.org/2/library/itertools.html#recipes

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)
...