Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连接/组合MX1 numpy阵列和MXN numpy阵列_Python_Arrays_Pandas_Numpy - Fatal编程技术网

Python 连接/组合MX1 numpy阵列和MXN numpy阵列

Python 连接/组合MX1 numpy阵列和MXN numpy阵列,python,arrays,pandas,numpy,Python,Arrays,Pandas,Numpy,必需的时间戳包含5911个时间戳 基于时间的mfcc_功能包含5911个样本,每个样本具有20个mfcc功能 因此,如果您要查看基于时间的mfcc功能 它看起来像: row1 val2 val3 ... val 20 row2 val2 val3 ... val 20 row3 val2 val3 ... val 20 . . . row5911 val2 val3 ... val 20 print type(required_time_s

必需的时间戳
包含5911个时间戳
基于时间的mfcc_功能
包含5911个样本,每个样本具有20个mfcc功能

因此,如果您要查看基于时间的mfcc功能
它看起来像:

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)  

(5911,)

(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)
其中,时间1到时间5911仅为所需时间戳中包含的值。
我试过:

mfcc_features_with_times= np.hstack((required_time_stamps,time_based_mfcc_feature))
但出现此错误

但同样的错误是:

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

更新:我按照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=新标签\u np\u数组
B=基于时间的mfcc\u功能

` 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`

既然您已经在线程中找到了问题第一部分的答案,我将解决第二个问题:

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

您可以像以前一样对numpy数组进行切片。因此,要沿轴0将二维数组
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,:] 
或分别

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

好的,我做错了什么?没有一个解决方案对我有效。试试cmaher的建议。cmaher的建议有效!现在我该怎么处理我的问题呢?如果我将数据存储为numpy数组或pandas数据帧,会有什么不同吗?我要把它喂给cnn。你能帮我一下吗:我对熊猫没什么经验,但afaik pd.DataFrame只是numpy阵列的一个奇特容器。我不太熟悉索引语法,但是如果您不想在第一行而是在最后一行对齐,
的意思是什么:
如果A是(6),B是(5,21),我希望A变成(5),即删除最后一个值。所以A和B有相同的形状。同样,如果A是(5,)而B是(6,21),B应该变成(5,21),即删除BI的最后一行。我编辑了我的答案,还交换了A和B-我认为这就是你的索引器的原因。
---------------------------------------------------------------------------
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
>>> 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]])
mfcc_features_with_times= np.hstack((required_time_stamps[:,None],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`
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:,:]