我创建了一个numpy数组,该数组的每个元素都包含一个形状相同的数组(9,5)。我想要的是3D阵列。
我尝试使用np.stack。
data = list(map(lambda x: getKmers(x, 9), data)) # getKmers creates a
# list of list from a pandas dataframe
data1D = np.array(data) # shape (350,)
data2D = np.stack(data1D)
data1D:
array([list([ pdbID AtomNo Type Eta Theta
0 1a9l.pdb 2.0 G 169.225 212.838
1 1a9l.pdb 3.0 G 168.439 206.785
2 1a9l.pdb 4.0 U 170.892 205.845
3 1a9l.pdb 5.0 G 164.726 225.982
4 1a9l.pdb 6.0 A 308.788 144.370
5 1a9l.pdb 7.0 C 185.211 209.363
6 1a9l.pdb 8.0 U 167.612 216.614
7 1a9l.pdb 9.0 C 168.741 219.239
8 1a9l.pdb 10.0 C 163.639 207.044, pdbID AtomNo Type Eta Theta
1 1a9l.pdb 3.0 G 168.439 206.785
2 1a9l.pdb 4.0 U 170.892 205.845
3 1a9l.pdb 5.0 G 164.726 225.982
4 1a9l.pdb 6.0 A 308.788 144.370
5 1a9l.pdb 7.0 C 185.211 209.363
6 1a9l.pdb 8.0 U 167.612 216.614
7 1a9l.pdb 9.0 C 168.741 219.239
8 1a9l.pdb 10.0 C 163.639 207.044
我收到此错误: 无法将尺寸为9的序列复制到尺寸为5的数组轴上
我想创建一个3D矩阵,其中每个子数组都在新的3D维度中。我猜想新形状是(9,5,350)
答案 0 :(得分:0)
您需要使用
data.reshape((data.shape[0], data.shape[1], 1))
示例
from numpy import array
data = [[11, 22],
[33, 44],
[55, 66]]
data = array(data)
print(data.shape)
data = data.reshape((data.shape[0], data.shape[1], 1))
print(data.shape)
运行示例首先打印2D数组中每个尺寸的大小,重新排列数组的形状,然后总结新3D数组的形状。
结果
(3,2)
(3,2,1)
来源:https://machinelearningmastery.com/index-slice-reshape-numpy-arrays-machine-learning-python/
答案 1 :(得分:0)
如果要创建每个子数组都在新3D维度中的3D矩阵,最终形状不是(350,9,5)
吗?在这种情况下,您可以简单地使用:
new_array = np.asarray(data).reshape(350,9,5)
答案 2 :(得分:0)
从您的问题看来,getKmers(x,9)产生了一个9个长度为350的列表,而data
输入中包含5个元素。您需要一个(9,5,350)数组。这应该可以通过以下方式实现:
arr = np.swapaxes([getKermers(x, 9) for x in data], 0, 1)
请注意,swapaxes
与重塑不同。如果仅执行np.array([getKermers(x, 9) for x in data]).reshape(9, 5, 350)
,最终将得到所需的输出形状,但数据顺序错误。