当前位置: 首页 > 知识库问答 >
问题:

将MX1 numpy阵列与MXN numpy阵列串联/组合

姬浩渺
2023-03-14

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)  
print required_time_stamps.shape  

(5911,)

print type(time_based_mfcc_feature)
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只是所需的\u time\u标记中包含的值
我试过:

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

然后我尝试转置:

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将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]])

在这个例子中,堆叠是可行的,但我不知道为什么相同的逻辑不适用于我。

更新:我按照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)。请告知。

更新错误,而SLICINg:目前当我做A=A[: B. form[0],:]其中A=new_labels_np_arrayB=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`

共有1个答案

郗河
2023-03-14

既然您已经在线程numpy-concatenate-2d-arrays-with-1d-array中找到了问题第一部分的答案,那么我将回答第二个问题:

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

可以像分割列表一样分割numpy数组。因此,沿轴0将2D阵列修剪为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:,:]
 类似资料:
  • 所以,我正在尝试匹配 2 个不同的数组。如果相同的单元格匹配,我想使用 .slice 方法从一个数组中删除该单元格。 编辑:我想做的是从数组1中移除一个数字,如果数组2包含一个匹配的数字。代码现在的工作方式是只删除1个条目。我要删除第一个数组中的所有条目。 我尝试运行这个,在控制台日志下,array1没有变化。似乎拼接方法没有删除任何单元格。我搜索了SE,但没有找到任何可以帮助我的东西。

  • 问题内容: 我想知道从ArrayList转换为Array是否安全/建议?我有一个文本文件,每行一个字符串: 我想将它们读入数组列表,然后将其转换为数组。建议这样做/合法吗? 谢谢 问题答案: 是的,将转换为是安全的。一个好主意取决于您的预期用途。您需要提供的操作吗?如果是这样,请将其保留为。否则转换掉! 输出

  • 问题内容: 我需要将几个数组合并为一个数组。描述我要寻找的内容的最好方法是将阵列“交织”为单个阵列。 例如,从数组#1中取出第一项,然后追加到最终数组中。从数组2获取项目1,然后追加到最终数组。从数组#1获得第二项并追加…等。 最终的数组如下所示: array#1.element#1 array#2.element#1。。。 “踢球者”是各个阵列可以具有各种长度。 是否有更好的数据结构要使用? 问

  • 问题内容: 在知道数组索引的情况下,使用Arrays或HashMaps更好(在性能方面)吗?请记住,示例中的“对象数组/映射”只是一个示例,在我的真实项目中,它是由另一个类生成的,因此我不能使用单个变量。 ArrayExample: HashMapExample: HashMap看起来好得多,但我确实需要在此方面具有性能,因此具有优先权。 编辑: 那么是数组,仍然欢迎建议 编辑: 我忘了提,Arr

  • 我正在尝试减少阵列流的并行流 我知道合并器用于合并并行流。。但它并没有像我预期的那样工作,因为我得到了如下重复结果:- 那么为什么结果是重复的呢?在累加器中使用数组列表是否线程安全?

  • 首先,我知道Firestore是如何工作的,并且花了很多时间评估不同的方法以获得良好的结构。但我仍在考虑以下情况: 有一个已知食谱的数据库。用户可以添加菜谱,但必须确认它们是真正的菜谱,而不仅仅是一些变体。因此,每个用户都可以从用户生成的食谱列表中选择receipes,说明他们知道如何烹饪(或添加新的)。 现在,我希望用户与其他人分享他们的receipes列表,但我不确定如何最好地使用Firest