连接/组合MX1 Numpy阵列与MXN Numpy阵列



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    

这些时间1到时间5911仅仅是所需的_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

然后我尝试了转pose:

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 Condenate 2D数组与1D数组,但我认为这是其他的。

目标是将这些数据馈送到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]])

在此示例中,堆叠有效,但是不知道为什么相同的逻辑对我不起作用。

更新:我能够通过follwing cmaher的建议来解决:

mfcc_features_with_times= np.hstack((required_time_stamps[:,None],time_based_mfcc_feature))

但是,只有在两个都具有相同的维度时,这是正确的。在大多数情况下,我最终以具有形状的数组A(8400(和阵列B具有形状(8399,21(。

如何截断/删除A的最后几行,以使A和B具有相同的形状(8399,(和(8399,21(。请建议。

切片时更新错误:目前我做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`

由于您已经在线程numpy-concatenate-2d-arrays-with-1d-array中找到了问题的第一部分的答案,我将解决第二个问题:

如何截断/删除A的最后几行,以使A和B 具有相同的形状,例如(8399,(和(8399,21(。请建议。

您可以像切片列表一样切成一个numpy数组。因此,要将2D阵列B沿轴0缩小到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,:] 

或分别

trim = min(A.shape[0], B.shape[0])
A = A[-trim:]
B = B[-trim:,:]

相关内容

  • 没有找到相关文章

最新更新