Python:将元组转为数组
Python: turn tuples into array
目前,我有一个如下所示的元组列表:
[(0, 0.13), (323, 0.72), (812, 0.35), ..., (2127, 0.44)]
元组按第一个元素排序:0 -> 323 -> 812 -> ...
我想把这个元组列表变成一个数组(或稀疏矩阵),每个元组的第一个元素是第二个元素的数组索引:
[0.13, 0, ..., 0, 0.72, 0, ..., 0, 0.35, 0, ...]
并用0填充这个数组的末尾,以将其扩展到一定长度。
任何人都可以在 python 中提供上述功能的快速实现吗?
我目前使用字典来完成这个过程,对于大数组来说速度很慢。
谢谢。
我认为这会满足您的要求:
results = []
for k,i in list_of_tuples:
while k > len(results):
results.append(0)
results.append(i)
这是一个示例 运行,给定输入 [(0, 12), (5, 43), (10, 1)]
,结果是:
>>> i = []
>>> for k,v in t:
... while k > len(i):
... i.append(0)
... i.append(v)
...
>>> i
[12, 0, 0, 0, 0, 43, 0, 0, 0, 0, 1]
您可以预先分配一个零数组,然后填写提供的数字:
def expand_sparse_array(inp):
length = (inp[-1][0]+1) # index of last element + 1
out = [0]*length
for (idx, val) in inp:
out[idx] = val
return out
例如:
>>> expand_sparse_array([(0, 0.13), (3, 0.72), (5, 0.35), (10, 0.44)])
[0.13, 0, 0, 0.72, 0, 0.35, 0, 0, 0, 0, 0.44]
目前,我有一个如下所示的元组列表:
[(0, 0.13), (323, 0.72), (812, 0.35), ..., (2127, 0.44)]
元组按第一个元素排序:0 -> 323 -> 812 -> ...
我想把这个元组列表变成一个数组(或稀疏矩阵),每个元组的第一个元素是第二个元素的数组索引:
[0.13, 0, ..., 0, 0.72, 0, ..., 0, 0.35, 0, ...]
并用0填充这个数组的末尾,以将其扩展到一定长度。
任何人都可以在 python 中提供上述功能的快速实现吗?
我目前使用字典来完成这个过程,对于大数组来说速度很慢。
谢谢。
我认为这会满足您的要求:
results = []
for k,i in list_of_tuples:
while k > len(results):
results.append(0)
results.append(i)
这是一个示例 运行,给定输入 [(0, 12), (5, 43), (10, 1)]
,结果是:
>>> i = []
>>> for k,v in t:
... while k > len(i):
... i.append(0)
... i.append(v)
...
>>> i
[12, 0, 0, 0, 0, 43, 0, 0, 0, 0, 1]
您可以预先分配一个零数组,然后填写提供的数字:
def expand_sparse_array(inp):
length = (inp[-1][0]+1) # index of last element + 1
out = [0]*length
for (idx, val) in inp:
out[idx] = val
return out
例如:
>>> expand_sparse_array([(0, 0.13), (3, 0.72), (5, 0.35), (10, 0.44)])
[0.13, 0, 0, 0.72, 0, 0.35, 0, 0, 0, 0, 0.44]