我正在尝试为 ML 程序格式化我的数据。有 33,000 个事件,每个事件有 3 个我想考虑的东西:质量、能量、坐标。
质量的形状为 (33000,),看起来像: [188.9 189.0 125.7 ... 127.4 201.0 210.1] 。 能量也是 (33000,) 并且看起来相同:[1 2 3 ... 8 9 10]。然后,我还有一个形状为 (33000,10) 的 10 维坐标向量
每个坐标都是包含 10 个坐标点的 10 维向量:
坐标数组:
[[19.9 613.0 6.5 127.4 486.4 54.3 194.0 19.4 194.0 32.3]
[1.89 1.01 4.9 ... 2.3 2.3 2.3]
[1.2 6.1 4.0 ... 1.7 1.7 1.7]
...
]
我想将它们输入机器学习程序。但是,我不想创建一个将 10 维坐标压缩为一组平面浮点值的数组,如下所示:
[188.9 1 19.9 613.0 6.5 127.4 486.4 54.3 194.0 19.4 194.0 32.3\]
[189.0 2 1.89 1.01 4.9 ... 2.3 2.3 2.3\]
...
这会丢失最后 10 个值本质上联系在一起的信息,因为它们是一个坐标。相反,我想创建一个在数组中间有一个向量的 numpy 数组
[188.9 1 [19.9 613.0 6.5 127.4 486.4 54.3 194.0 19.4 194.0 32.3]]
[189.0 2 [1.89 1.01 4.9 ... 2.3 2.3 2.3]]
...
这样机器学习程序就知道将坐标向量视为它自己的特征,而不是一组不同的特征。所以实际的形状可能是 (33000,3) 而不是 (33000,13) 这可能吗?
我尝试过 dstack、concatenate、stack 等。所有这些都存在“轴必须完全匹配”的问题。 就我而言,轴不匹配。一个特征的轴为 10,而其他特征要么没有轴 (33000,),要么只有 1 个轴 (33000,1)(如果强制它有轴)。我不确定是否缺少一个 numpy 数组事实,或者这是否不可能。
不能拥有具有不同大小元素的 numpy 数组,想要达成的目标是创建一个数据结构,其中每个事件都是一个列表,并且列表中的每个元素都是特征。
可以使用列表推导来实现这一点:
import numpy as np
mass = np.array([188.9, 189.0, 125.7, 127.4, 201.0, 210.1])
energy = np.array([1, 2, 3, 8, 9, 10])
coordinates = np.array([
[19.9, 613.0, 6.5, 127.4, 486.4, 54.3, 194.0, 19.4, 194.0, 32.3],
[1.89, 1.01, 4.9, 2.3, 2.3, 2.3, 1.2, 3.4, 5.6, 7.8],
[1.2, 6.1, 4.0, 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7],
[1.2, 6.1, 4.0, 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7],
[1.2, 6.1, 4.0, 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7],
[1.2, 6.1, 4.0, 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7]
])
# 创建一个包含所有事件的列表
events = [
[mass[i], energy[i], coordinates[i]] for i in range(len(mass))
]
print(events)
这将为提供一个列表,其中每个事件都被表示为一个三元素列表,其中包含质量、能量和坐标向量:
[[188.9, 1, array([ 19.9, 613. , 6.5, 127.4, 486.4, 54.3, 194. , 19.4, 194. , 32.3])],
[189.0, 2, array([1.89, 1.01, 4.9 , 2.3 , 2.3 , 2.3 , 1.2 , 3.4 , 5.6 , 7.8 ])],
[125.7, 3, array([1.2, 6.1, 4. , 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7])],
[127.4, 8, array([1.2, 6.1, 4. , 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7])],
[201.0, 9, array([1.2, 6.1, 4. , 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7])],
[210.1, 10, array([1.2, 6.1, 4. , 1.7, 1.7, 1.7, 2.1, 4.3, 6.5, 8.7])]]
此表示形式保留了坐标向量的结构,并且大多数机器学习库可以轻松处理此类数据。 可以轻松地将其传递给机器学习模型。
标签:python,numpy,machine-learning,feature-engineering From: 78785643