Как превысить ограничение numpy.array () для преобразования списка массивов в массив массивов? - PullRequest
0 голосов
/ 30 июня 2018

У меня есть список массивов, каждый из которых содержит 16 int:

ListOfArray=[array([0,1,....,15]), array([0,1,....,15]), array([0,1,....,15]),....,array([0,1,....,15])]

Я хочу преобразовать его в массив массива.

Поэтому я использую:

ListOfArray=numpy.array(ListOfArray) 

or:
ListOfArray=numpy.asarray(ListOfArray)

or :
ArrayOfArray=numpy.asarray(ListOfArray)

Тот же результат

Если мой список массивов содержал менее 17716 массивов, у меня нормальный результат:

[[0 0 0 ... 0 0 1]
[1 0 0 ... 0 1 0]
[0 0 0 ... 0 0 1]
...
[0 1 1 ... 1 0 0]
[0 1 1 ... 0 0 0]
[0 1 1 ... 0 0 1]]

Но из 17716 массивов у меня есть это:

[array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
 array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0])
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]) ...
 array([0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0])
 array([0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1])
 array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])]

Кажется, что где-то есть предел, почему? Можем ли мы превзойти его?

Редактировать:

Нет проблем с numpy.array. Не желательно иметь массив, содержащий 17 значений. Я преобразовал WAV-кадры в двоичный файл, а затем в строку (из пятнадцати 0 и 1), которые я добавляю 0 раньше, если это отрицательное и 1 для положительного, а затем преобразовать в список, а затем в массив .. Я не ожидал значение -32768 (-0b10000000000000000), считалось, что -32767 и 32767 (15 двоичных цифр) были максимальными. Это довольно уродливый код, я не горжусь этим, но если у вас есть совет по менее сложному коду, вот он:

import numpy as np
import wave
import struct

f= wave.open('Test16PCM.wav','rb')

nf = f.getnframes()
frames=f.readframes(nf)

f.close()


L=[]

# extracting values samples
for i in range (0,((nf-1)*4)+1,4):

    L.append(  (struct.unpack('<h',frames[i:(i+2)])[0])  ) # only the left track


Lbin=[] # convert int values to string of binaries + 0 or 1 for negative or positive

for i in L:         
    a=str(bin(i))

    if a[0]=="-" :  # something like "-0b00101101"
        a=a[3:]

        while len(a)<16: # to have same length binary number (was 15 before correction)
            a='0'+a
        Lbin.append('0'+a)

    else :          # something like "0b00101101"
        a=a[2:] 

        while len(a)<16:
            a='0'+a

        Lbin.append('1'+a)


Lout=[]

for i in Lbin :
    temp=[]
    for j in i :
        temp.append(int(j))

    temp=np.array(temp)

    Lout.append(temp)


Lout=np.asarray(Lout)

print(Lout)
...