我有numpy数组nodpi
有mfcc值,并且有形状(5911,20)。
我有一个列表mfcc
,其中有5911个标签,例如a =[]
apple
cow
。
我想将这些标签附加到dog
numpy数组。
STEP1 我将带有标签的列表转换为数组:
mfcc
第2步我确保at = np.array(a)
print (at)
print at.shape
print type(at)
['apple' 'apple' 'apple' ..., 'cow' 'cow' 'cow']
(5912,)
<type 'numpy.ndarray'>
和at
的尺寸相同:
mfcc
第3步然后我把它们叠在一起。
if len(at) > len(mfcc):
at= at[ :-1]
问题步骤现在我想将此mfcc_with_labels=np.hstack((mfcc_with_labels,at[:,None]))
print mfcc_with_labels.shape
(5911,21)
保存到文件中。这样我以后就可以把它送到神经网络了。
mfcc_with_labels
它会引发巨大的 ERROR **
np.savetxt("mfcc_with_labels.txt", mfcc, newline= "\n", delimiter="/t")
**
我尝试指定&#39; fmt =%s&#39;作为一种选择但没有任何反应。
我检查过并且---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-15-7709c644ca06> in <module>()
1 print mfcc_features_with_times_and_labels.shape
2
----> 3 np.savetxt("mfcc_with_labels.txt", mfcc, newline= "\n", delimiter="/t")
/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.pyc in savetxt(fname, X, fmt, delimiter, newline, header, footer, comments)
1256 raise TypeError("Mismatch between array dtype ('%s') and "
1257 "format specifier ('%s')"
-> 1258 % (str(X.dtype), format))
1259 if len(footer) > 0:
1260 footer = footer.replace('\n', '\n' + comments)
TypeError: Mismatch between array dtype ('|S32') and format specifier ('%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e/t%.18e')
并且堆叠/追加确实有效,
[&#39; -498.357912575&#39; &#39; -3.40930872496e-14&#39; &#39; 1.55285010312e-14&#39; &#39; -5.31554105812e-14&#39; &#39; 4.81736993039e-15&#39; &#39; -3.17281148841e-14&#39; &#39; 5.24276966145e-15&#39; &#39; -3.58849635039e-14&#39; &#39; 3.11248820963e-14&#39; &#39; -6.31521494552e-15&#39; &#39; 1.96551267563e-14&#39; &#39; 1.26848188878e-14&#39; &#39; 6.53784651891e-14&#39; &#39; -3.15089835366e-14&#39; &#39; 2.84134910594e-14&#39; &#39; 1.03625144071e-13&#39; &#39; -5.52444866686e-14&#39; &#39; -5.04415946628e-14&#39; &#39; 1.9026074286e-14&#39; &#39; 3.42584334296e-14&#39; &#39;苹果&#39;]
无法理解为什么没有得救。
我已经看过:numpy beginner: writing an array using numpy.savetxt numpy savetxt fails when using file handler How to combine a numpy array and a text column and export to csv
请指导我如何正确保存这个新的numpy数组。 我是来自R编程背景,在python中是否有任何简单的python等同于将这个数组保存为R数据帧类型的结构?
最终目标是将其发送到神经网络。
答案 0 :(得分:2)
fmt
的默认savetxt
为%.18e
。尝试使用数字
In [84]: '%.18e'%12
Out[84]: '1.200000000000000000e+01'
实际格式是字符串复制21次(列数)并与分隔符连接。
但是你的数组有一个字符串dtype
,并且包含字符串(因为你附加了标签。这不适用于那种格式。
您的mfcc_with_labels[1]
In [86]: row = np.array(['-5.04415946628e-14', '1.9026074286e-14', '3.425843
...: 34296e-14', 'apple'])
In [87]: row
Out[87]:
array(['-5.04415946628e-14', '1.9026074286e-14', '3.42584334296e-14',
'apple'], dtype='<U18')
'%s'fmt应该有效;这种格式化:
In [88]: '%s,%s,%s,%s'%tuple(row)
Out[88]: '-5.04415946628e-14,1.9026074286e-14,3.42584334296e-14,apple'