我正在使用Python、numpy和scikit learn。我有存储在SQL表中的键和值的数据。我将其作为返回的元组列表检索:[(id, value),...]
。每个id在列表中只出现一次,元组按id的升序排列。这个过程要完成几次,这样我就有了key: value
对的多个列表。因此:
dataset = []
for sample in samples:
listOfTuplePairs = getDataFromSQL(sample) # get a [(id, value),...] list
dataset.append(listOfTuplePairs)
键可以在不同的样本中复制,每行的长度可能不同。例如dataset
可能是:
可以看出,每一行都是一个样本,并且一些id(在本例中是2)出现在多个样本中。在
问题:我希望构造一个适合使用scikit learn处理的单个(可能是稀疏的)numpy数组。与每个样本的特定键(id)相关的值应在同一“列”中对齐(如果该列是正确的术语),以便上述示例的矩阵如下所示:
ids = 1 2 3 4 5
------------------------------
dataset = [(0.13, 2.05, null, null, null),
(null, 0.23, null, 7.35, 5.60),
(null, 0.61, 4.45, null, null)]
如您所见,我还希望从矩阵中去掉id(尽管我需要保留一个它们的列表,以便知道矩阵中的值与什么相关。key: value
对的每个初始列表可能包含几千行,并且可能有几千个样本,因此得到的矩阵可能非常大。请提供考虑速度(在Python的限制内)、内存效率和代码清晰度的答案。在
非常感谢你的帮助。在
这里有一个基于NumPy的方法来创建一个稀疏矩阵^{} ,重点是内存效率-
请注意,如果}的用法,它给我们提供了这样一个惟一的id-
^{pr2}$IDs
应该是输出数组中的列号,那么您可以用这样的方法替换{这会给我们带来很好的性能提升!在
样本运行-
您可以将数据集中的每个元素转换为字典,然后使用pandas数据帧,它将返回接近所需输出的结果。如果需要
2D
numpy数组,我们可以使用as_matrix()
方法将数据帧转换为numpy数组:相关问题 更多 >
编程相关推荐