Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当数组既不为空也不损坏时,从音频文件构建的NumPy数组将抛出零大小数组错误_Python_Arrays_Numpy_Wav - Fatal编程技术网

Python 当数组既不为空也不损坏时,从音频文件构建的NumPy数组将抛出零大小数组错误

Python 当数组既不为空也不损坏时,从音频文件构建的NumPy数组将抛出零大小数组错误,python,arrays,numpy,wav,Python,Arrays,Numpy,Wav,我的代码是: import numpy from scipy.io.wavfile import read audio_file_location = 'file_location' audio_file = read(audio_file_location) n = numpy.array( audio_file[1],dtype=float ) size = n.size w = 410 limit = 205 delta = n.size/410 i = 0 j = 0 a = 1

我的代码是:

import numpy
from scipy.io.wavfile import read

audio_file_location = 'file_location'

audio_file = read(audio_file_location)
n = numpy.array( audio_file[1],dtype=float )
size = n.size
w = 410
limit = 205
delta  = n.size/410
i = 0
j = 0
a = 1

while i < w:
    J = min(size, j+delta)
    if J > j:
        b = numpy.max( n[j:J] )
    else:
        break

    # Do stuff
    i = i+1
    j = j+delta
    if i >= limit:
        # just something to stop the script.
        # add a break point in the next line of code.
        # and then run the top part of the script two or 3 times.
        a = 1+a
其他NumPy阵列,例如:

numpy.array(range(0, 176942))
和其他音频文件工作正常。该错误与多个音频文件一起抛出,而不仅仅是一个

此错误的来源是什么?

我认为文件没有损坏。但如果是的话

如何检查/修复它?

注意:

File "<ipython-input-14-7d842d790860>", line 1, in <module>
runfile('.../Documents/wav_analizer/questoin_on_numpy.size.py', wdir='.../Documents/wav_analizer')

File ".../.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File ".../.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
builtins.execfile(filename, *where)

File ".../Documents/wav_analizer/questoin_on_numpy.size.py", line 30, in <module>
b = numpy.max( n[j:J] )

File ".../.local/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 2320, in amax
out=out, **kwargs)

File ".../.local/lib/python2.7/site-packages/numpy/core/_methods.py", line 26, in _amax
return umr_maximum(a, axis, None, out, keepdims)

ValueError: zero-size array to reduction operation maximum which has no identity
当i>limit for limit=205、达到该极限后进行2次或3次迭代时,将发生错误。j和j的值可能因音频文件的长度而异。j和j值的示例为:197760、198720;和8878689217

完全回溯:

File "<ipython-input-14-7d842d790860>", line 1, in <module>
runfile('.../Documents/wav_analizer/questoin_on_numpy.size.py', wdir='.../Documents/wav_analizer')

File ".../.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File ".../.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
builtins.execfile(filename, *where)

File ".../Documents/wav_analizer/questoin_on_numpy.size.py", line 30, in <module>
b = numpy.max( n[j:J] )

File ".../.local/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 2320, in amax
out=out, **kwargs)

File ".../.local/lib/python2.7/site-packages/numpy/core/_methods.py", line 26, in _amax
return umr_maximum(a, axis, None, out, keepdims)

ValueError: zero-size array to reduction operation maximum which has no identity
这就是错误的原因。但是,当我尝试解析N时,我遇到了一个索引问题:

import os
import numpy
from scipy.io.wavfile import read

working_dir = os.path.dirname(os.path.realpath(__file__))
audio_file_location = os.path.join(working_dir, 'test_sounds/guitarup_full.wav')

audio_file = read(audio_file_location)

delta_t = audio_file[0] 
n = audio_file[1]     # this is a numpy array
print "Size",  n.size
print "Shape", n.shape

for i in range(0, n.size-1):
    a = n[i][0]
    b = n[i][1]

for i in range(0, n.shape[0]-1):
    a = n[i][0]
    b = n[i][1]
输出:

"Size" 176942
"Shape" (88471, 2)

/.local/lib/python2.7/site-packages/scipy/io/wavfile.py:273: WavFileWarning: Chunk (non-data) not understood, skipping it.
WavFileWarning)

Traceback (most recent call last):

File "<ipython-input-51-7d842d790860>", line 1, in <module>
runfile('/Documents/wav_analizer/questoin_on_numpy.size.py', wdir='/Documents/wav_analizer')

File "/.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File "/.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
builtins.execfile(filename, *where)

File "/Documents/wav_analizer/questoin_on_numpy.size.py", line 26, in <module>
a = n[i][0]

IndexError: index 88471 is out of bounds for axis 0 with size 88471
“大小”176942
“形状”(88471,2)
/.local/lib/python2.7/site packages/scipy/io/wavfile.py:273:WavFileWarning:Chunk(非数据)未被理解,跳过它。
WAVFELE(警告)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('/Documents/wav_analizer/questoin_on_numpy.size.py',wdir='/Documents/wav_analizer')
文件“/.local/lib/python2.7/site packages/spyder/utils/site/sitecustomize.py”,第705行,在runfile中
execfile(文件名、命名空间)
文件“/.local/lib/python2.7/site packages/spyder/utils/site/sitecustomize.py”,第94行,在execfile中
execfile(文件名,*其中)
文件“/Documents/wav_analizer/questoin_on_numpy.size.py”,第26行,在
a=n[i][0]
索引器:索引88471超出大小为88471的轴0的界限

为什么大小和形状之间存在差异?

我猜,对于只有一个声道的声音文件,即单声道而非立体声,这是不可行的。在这种情况下,当您创建
n
数组时,您将获取通道的第一个元素,而不是整个第一个通道

您可以尝试以下方法:

if audio_file.ndims > 1:
    audio_file = audio_file[1]
n = numpy.array(audio_file, dtype=float)

如果数据已经是一维的,请直接使用它。如果数据至少有两个通道,请按照代码中的方法使用第二个通道。

解决方案:

File "<ipython-input-14-7d842d790860>", line 1, in <module>
runfile('.../Documents/wav_analizer/questoin_on_numpy.size.py', wdir='.../Documents/wav_analizer')

File ".../.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File ".../.local/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
builtins.execfile(filename, *where)

File ".../Documents/wav_analizer/questoin_on_numpy.size.py", line 30, in <module>
b = numpy.max( n[j:J] )

File ".../.local/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 2320, in amax
out=out, **kwargs)

File ".../.local/lib/python2.7/site-packages/numpy/core/_methods.py", line 26, in _amax
return umr_maximum(a, axis, None, out, keepdims)

ValueError: zero-size array to reduction operation maximum which has no identity
我找到了解决办法。以下脚本有效:

import os
import scipy.io.wavfile
import numpy

audio_file_location = "your audio file location"

F = scipy.io.wavfile.read(audio_file_location)

delta_t = F[0]
N = F[1]

print "shape:", N.shape
print "dtype:", N.dtype
print "min, max:", N.min(), N.max()
print "first value:", N[0]
print ""

chennel_1 = numpy.zeros(N.size)
chennel_2 = numpy.zeros(N.size)

i = 0
for x in N:
    chennel_1[i] = x[0]
    chennel_2[i] = x[1]
    i = i+1

i = 0
while i < 100:
    print "ch_1", i, chennel_1[i]
    print "ch_2", i, chennel_2[i]
    i = i+1
导入操作系统
导入scipy.io.wav文件
进口numpy
音频文件位置=“您的音频文件位置”
F=scipy.io.wavfile.read(音频文件位置)
delta_t=F[0]
N=F[1]
打印“形状:”,N.形状
打印“数据类型:”,N.dtype
打印“最小,最大:”,N.min(),N.max()
打印“第一个值:”,N[0]
打印“”
chennel_1=numpy.零(N.尺寸)
chennel_2=numpy.零(N.尺寸)
i=0
对于N中的x:
chennel_1[i]=x[0]
chennel_2[i]=x[1]
i=i+1
i=0
当我<100时:
打印“Chu_1”,i,chennel_1[i]
打印“Chu 2”,i,chennel_2[i]
i=i+1

还是不明白形状和大小的差异。如果有人能解释,那就太好了。

请包括完整的回溯。目前我们不知道是哪行代码引发了这个错误。这是Python 2还是Python 3?另外,请给我们足够的关于输入的信息来诊断这个问题。发生故障的阵列的大小或形状是什么?当它失败时,
J
J
的值是多少?打印调试建议:在
b=numpy.max(n[J:J])
之前添加行
print(n.shape,J,J)
。当i>限制时会发生错误。j和j的值可能因音频文件的长度而异。j和j值的示例有:197760198720,但我已经到了:n=numpy.array(audio_file[1],dtype=float),区别是什么?我得到:AttributeError:“tuple”对象没有属性“ndims”。以上不是解决方案。请参阅:scipy.io.wavfile.read返回(int,numpy.array)My bad,我认为函数只返回数据。我认为错误的根源仍然是通道数,但我的修正是错误的。