required_time_stamps
包含5911个时间戳
time_based_mfcc_feature
包含5911个样本,每个样本具有20个mfcc特征。
所以,如果你要看time_based_mfcc_feature
它看起来像:
row1 val2 val3 ... val 20
row2 val2 val3 ... val 20
row3 val2 val3 ... val 20
.
.
.
row5911 val2 val3 ... val 20
print type(required_time_stamps)
<输入' numpy.ndarray'>
print required_time_stamps.shape
(5911,)
print type(time_based_mfcc_feature)
<输入' numpy.ndarray'>
print time_based_mfcc_feature.shape
(5911,20)
我想将这两者结合起来,以便我有:
在R中,我可以简单地做到
time_based_mfcc_feature<-as.data.frame(time_based_mfcc_feature)
required_time_stamps<-as.data.frame(required_time_stamps)
new_dataframe <- merge(required_time_stamps,time_based_mfcc_feature)
View(new_dataframe)
我如何在python中实现这一目标?
这样最终的数据看起来像这样:
time1 row1 val2 val3 ... val 20
time2 row2 val2 val3 ... val 20
time3 row3 val2 val3 ... val 20
.
.
.
time5911 row5911 val2 val3 ... val 20
这些time1到时间5911只是required_time_stamps中包含的值 我试过了:
mfcc_features_with_times= np.hstack((required_time_stamps,time_based_mfcc_feature))
但是这个错误
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-41-ce462d805743> in <module>() ----> 1 mfcc_features_with_times= np.hstack((required_time_stamps,time_based_mfcc_feature)) /usr/local/lib/python2.7/dist-packages/numpy/core/shape_base.pyc in hstack(tup) 289 # As a special case, dimension 0 of 1-dimensional arrays is "horizontal" 290 if arrs and arrs[0].ndim == 1: --> 291 return _nx.concatenate(arrs, 0) 292 else: 293 return _nx.concatenate(arrs, 1) ValueError: all the input arrays must have same number of dimensions
然后我尝试了TRANSPOSE:
t = required_time_stamps.transpose
mfcc_features_with_times= np.hstack((t,time_based_mfcc_feature))
但同样的错误:
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-43-47cddb391d3f> in <module>() ----> 1 mfcc_features_with_times= np.hstack((t,time_based_mfcc_feature)) /usr/local/lib/python2.7/dist-packages/numpy/core/shape_base.pyc in hstack(tup) 289 # As a special case, dimension 0 of 1-dimensional arrays is "horizontal" 290 if arrs and arrs[0].ndim == 1: --> 291 return _nx.concatenate(arrs, 0) 292 else: 293 return _nx.concatenate(arrs, 1) ValueError: all the input arrays must have same number of dimensions
我也看过:Numpy concatenate 2D arrays with 1D array但我认为这是别的。
目标是逐行将此数据提供给keras神经网络 我还有5911个标签对应5911时间戳,稍后我将连接。
更新: 基于我试过的评论中的链接,
>>> a = np.array([[1,2,3], [2,3,4]])
>>> a
array([[1, 2, 3],
[2, 3, 4]])
>>> b = np.array([[1,2,3,0], [2,3,4,0]])
>>> b
array([[1, 2, 3, 0],
[2, 3, 4, 0]])
>>> c= np.hstack((a,b))
>>> c
array([[1, 2, 3, 1, 2, 3, 0],
[2, 3, 4, 2, 3, 4, 0]])
对于这个例子,堆叠工作,但不知道为什么相同的逻辑不适合我。
更新:我能够通过以下cmaher的建议解决:
mfcc_features_with_times= np.hstack((required_time_stamps[:,None],time_based_mfcc_feature))
然而,只有两者具有相同的维度时才会出现这种情况。 在大多数情况下,我最终得到具有形状(8400,)的阵列A和具有形状(8399,21)的阵列B.
如何截断/删除A的最后几行,以便A和B具有相同的形状 (8399,)和(8399,21)。 请指教。
SLICINg时更新错误:
目前当我做A = A[:B.shape[0],:]
时
哪里
A = new_labels_np_array
B = time_based_mfcc_feature
` 64 if len(new_labels_np_array) > len(time_based_mfcc_feature):
---> 65 new_labels_np_array = new_labels_np_array[:time_based_mfcc_feature.shape[0],:]
66 elif len(time_based_mfcc_feature)>len(new_labels_np_array):
67 time_based_mfcc_feature = time_based_mfcc_feature[:,new_labels_np_array.shape[0],:]
IndexError: too many indices for array`
答案 0 :(得分:3)
由于您已经在帖子numpy-concatenate-2d-arrays-with-1d-array中找到了问题第一部分的答案,我将解决第二个问题:
如何截断/删除A的最后几行,以便A和B都可以 具有相同的形状,如(8399,)和(8399,21)。请指教。
你可以像slice a list那样切割一个numpy数组。因此,要沿着轴0将2D数组 Boolean.class;
Character.class;
Byte.class;
Short.class;
Integer.class;
Long.class;
Float.class;
Double.class;
Void.class;
修剪为B
的大小。
A
这会修剪数组的末尾。如果你想在开始时修剪,即丢掉不适合形状的前几行而不是最后一行:
B = B[:A.shape[0],:]
编辑:您的评论意味着您事先并不知道哪个阵列更长。在那种情况下:
B = B[-A.shape[0]:,:]
或分别
trim = min(A.shape[0], B.shape[0])
A = A[:trim]
B = B[:trim,:]