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)
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:,:]