在将新附加的字符串列保存到numpy数组时无法执行np.savetxt

时间:2018-02-09 03:10:32

标签: python arrays numpy

我有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数据帧类型的结构?

最终目标是将其发送到神经网络。

1 个答案:

答案 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'