如何超过numpy.array()的限制以将数组列表转换为数组数组?

时间:2018-06-30 00:22:26

标签: python arrays list numpy limit

我有一个包含每个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])]

似乎某处有限制,为什么? 我们可以超越它吗?<​​/ p>

编辑:

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)

0 个答案:

没有答案