Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 有没有一种方法可以将一个字符串(假定存储为向量)转换为向量?_Python_Mfcc - Fatal编程技术网

Python 有没有一种方法可以将一个字符串(假定存储为向量)转换为向量?

Python 有没有一种方法可以将一个字符串(假定存储为向量)转换为向量?,python,mfcc,Python,Mfcc,我将mfcc数据保存到熊猫数据框中。我的问题是,当我想以数字矩阵的形式访问它时,我将它保存为str类型 i=0 for file in train_csv2['fname']: signal, sr = librosa.load(file) mfcc = librosa.feature.mfcc(signal, sr=sr, n_mfcc=13, n_fft=2048,

我将mfcc数据保存到熊猫数据框中。我的问题是,当我想以数字矩阵的形式访问它时,我将它保存为str类型

i=0
for file in train_csv2['fname']:
signal, sr = librosa.load(file)
mfcc = librosa.feature.mfcc(signal, sr=sr,
                            n_mfcc=13, 
                            n_fft=2048, 
                            hop_length=512)
mfcc = mfcc.T
train_csv2.at[i, 'FFT'] = mfcc
i += 1
运行此代码后,我的dataframe train_csv2已将所有值存储为字符串。由于我使用了大量的音频文件,我花了3.5个小时来运行这个程序

是否有方法转换字符串

进入列表/向量?

尝试以下代码:

 def test_1(self):
    input = '[[-8.46002580e+00  7.08650460e-01 -1.35593844e+01 -9.93381115e+00\n  -3.62304403e+00  4.12729614e+00]\n [ 9.54518993e+00 -2.74505349e+00 -1.17114286e+01 -8.55533103e+00\n   1.88484478e-01  7.91402262e+00]\n [ 1.49292642e+01 -1.56909610e+01 -1.10280461e+01 -8.37234667e+00\n   9.35007917e+00  1.34211000e+01]\n ...\n [-6.22648700e+02  0.00000000e+00  0.00000000e+00 ...  0.00000000e+00\n   0.00000000e+00  0.00000000e+00]\n [-6.22648700e+02  0.00000000e+00  0.00000000e+00 ...  0.00000000e+00\n   0.00000000e+00  0.00000000e+00]\n [-6.22648700e+02  0.00000000e+00  0.00000000e+00 ...  0.00000000e+00\n   0.00000000e+00  0.00000000e+00]]'
    first_clean = input[1:len(input) - 1]
    second_clean = first_clean.replace('\n', '')
    third_clean = re.findall('\[(.*?)\]', second_clean)
    return_list = []
    for array in third_clean:
        return_list.append([float(arr) for arr in array.split(' ') if arr])
    return return_list

我尝试了@Nicolescu建议的上述方法,经过一些努力,效果不错!(它最初返回一个空列表列表)

由于您使用的是数据帧,我建议对上述答案进行一些更改:

def clean_feat(input):    
    first_clean = input[1:len(input) - 1]
    second_clean = first_clean.replace('\n', '')
    last = second_clean.split()
    return_list = []
    for array in last:
        return_list.append([float(array)])
    return return_list

results = [clean_feat(x) for x in train_csv2['FFT']]
希望这能有所帮助,并感谢Nicolescu Ionut Lucian的原创想法,帮助我格式化自己的代码

def clean_feat(input):    
    first_clean = input[1:len(input) - 1]
    second_clean = first_clean.replace('\n', '')
    last = second_clean.split()
    return_list = []
    for array in last:
        return_list.append([float(array)])
    return return_list

results = [clean_feat(x) for x in train_csv2['FFT']]