2016-10-02 16 views
1

我目前試圖採樣音頻文件並將採樣信息存儲到txt文件中。在python中保存完整的數組作爲txt

採樣使用librosa完成。

當我將它保存到一個文件中時發生問題... 該數組沒有得到完全保存,我只能查看一些採樣點,其餘的點是虛線。

例如:

22050.000 
[ -8.61534572e-05 -1.64340396e-04 -8.03423245e-05 ..., -1.40137578e-04 
    -3.71412549e-04 -5.04361582e-04] 

我這是怎麼做的吧:

import tensorflow as tf 
import numpy as np 
import librosa 
from os import listdir 
from os.path import isfile, join 
import os 



path_train = "/home/k/kaldi-trunk/egs/start/s5/data/train" 
path_test = "/home/k/kaldi-trunk/egs/start/s5/data/test" 
dnn_train = "/home/k/kaldi-trunk/dnn/train/" 
dnn_test = "/home/k/kaldi-trunk/dnn/test/" 
dnn = "/home/k/kaldi-trunk/dnn/" 
path = "/home/k/kaldi-trunk/egs/start/s5/data/" 
train_filelist = path_train+"/wav_train.txt" 
test_filelist = path_test+"/wav_test.txt" 

    files_train = [f for f in listdir(dnn_train) if isfile(join(dnn_train, f))] 
    files_test = [f for f in listdir(dnn_test) if isfile(join(dnn_test, f))] 

    os.chdir(dnn_train) 
    train = [] 
    test = [] 


    for line in files_train: 
     #print dnn_train+line 
     y,sr=librosa.core.load(dnn_train+line) 
     train.append(y.tolist()) 

    print "Train done!" 

    for line in files_test: 
     x,sr=librosa.core.load(dnn_test+line) 
     test.append(x.tolist()) 

    print "Test done!" 

    os.chdir(dnn) 

    with open('sample_test.txt','wb') as f: 
     np.savetxt(f,test) 

    with open('sample_train.txt','wb') as f: 
     np.savetxt(f,train) 

任何可以解釋爲什麼我不能保存所有的採樣點,而不是幾個?

所需的輸出是兩個獨立的文件[sample_test,sample_train] 其中每行包含一個列表。 列表中的每個條目都應該包含儘可能多的小數,這就是爲什麼要將它存儲爲float或double的原因。

+0

文件大小是否對其輸出有影響? –

+0

我不確定我是否理解這個問題。 我沒有詳細說明。 –

+0

你期待'test'和'train'變量的格式是什麼?我詢問的原因是代碼似乎將它們創建爲一長串值,但在調用'np.savetxt()'時,您傳遞了兩個格式化字符串'%10s'和'%10.3f'。您是否期望列表中的每個項目都是兩個項目的列表?它可能有助於刪除所有其他代碼,並留下一個最小破碎的示例(例如,創建一個適當維度的隨機列表並嘗試保存)。 – kabdulla

回答

0

np.savetxt的參數應該是一個數組。

在保存數據前添加test = np.array(test)

  1. 如果數據無法轉換爲數組,則會發生錯誤。
  2. 可以打印,診斷,數組的形狀:print test.shape

你的輸出有你有一個浮動,然後在您的數據列表,要打印,而不是與NumPy陣列的內容。

相關問題