2013-10-08 102 views
5
from scipy.io.wavfile import read 
filepath = glob.glob('*.wav') 
rates = [] 
datas = [] 
for fp in filepath: 
    rate, data = read(fp) 
    rates.append(rate) 
    datas.append(data) 

我拿到名單 '數據' 是:蟒蛇:numpy的名單陣列和vstack

[array([0, 0, 0, ..., 0, 0, 0], dtype=int16), array([0, 0, 0, ..., 0, 0, 1], dtype=int16), array([0, 0, 0, ..., 0, 0, 0], dtype=int16),..., array([0, 0, 0, ..., 0, 0, 0], dtype=int16)] 

我用

new_array = numpy.vstack([datas]) 

得到new_array:

[[array([0, 0, 0, ..., 0, 0, 0], dtype=int16) 
    array([0, 0, 0, ..., 0, 0, 1], dtype=int16) 
    array([0, 0, 0, ..., 0, 0, 0], dtype=int16) 
    ... 
    array([0, 0, 0, ..., 0, 0, 0], dtype=int16)]] 

但我更喜歡一個是:

(array([[ 0, 0, 0, ..., 0, 0, 0], 
    [ 0, 0, 0, ..., 0, 0, 1], 
    [ 0, 0, 0, ..., 0, 0, 0], 
    ...,   
    [ 0, 0, 0, ..., 0, 0, 0]], dtype=int16) 

我應該使用哪個函數?

謝謝。

+0

我相信你不需要'''''vstack'調用。試試:'new_array = numpy.vstack(datas)'。 – ely

+0

我嘗試去除'[]',但我收到一條錯誤消息「'ValueError:除了連接軸之外的所有輸入數組維度必須完全匹配。」 – user2858910

+0

您可以打印'datas [0] .shape'嗎? – ely

回答

3

以下對我有用,所以datas的元素不是像您的問題所示的平面數組,可能的行具有不同的長度(原來,這是原因,請參閱註釋),或者您正在使用舊版本的vstack中的一維對象有問題? (雖然我認爲這不太可能)

In [14]: datas = [np.asarray([0, 0, 0, 0, 0, 0]), np.asarray([0, 0, 0, 0, 0, 1])] 

In [15]: datas 
Out[15]: [array([0, 0, 0, 0, 0, 0]), array([0, 0, 0, 0, 0, 1])] 

In [16]: datas[0].shape 
Out[16]: (6,) 

In [17]: np.vstack(datas) 
Out[17]: 
array([[0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 1]])