使用Numpy切片行?

时间:2012-06-19 20:25:28

标签: python numpy slice

让表想要使用numpy切片到

table = ['212:3:0:70.13911:-89.85361:3', '212:3:1:70.28725:-89.77466:7', '212:3:2:70.39231:-89.74908:9',  '212:3:3:70.48806:-89.6414:11', '212:3:4:70.60366:-89.51539:14', '212:3:5:70.60366:-89.51539:14', '212:3:6:70.66518:-89.4048:16']

t = np.asarray (table, dtype ='object')

想要使用numpy将所有........ 212:3:0, 212:3:1切成k。 希望所有'212:3:0:70.13911:-89.85361:3','212:3:1:70.28725:-89.77466:7'为v

进入dictionany dict(k,v)。我不想使用for循环来做这个... 我做了这个,因为它的循环很慢。

注意:行有“:”,但“:”表示dict':'。

2 个答案:

答案 0 :(得分:2)

字典理解的基础知识

要将某些内容转换为dict,您需要将其转换为可生成2个序列的迭代(生成两个元素序列的任何内容),例如[[1,2],[3,4]][(1,2),(3,4)]或{{1 }})

E.g。

zip([1,2,3,4], [5,6,7,8])

因此您需要以生成a的方式拆分每个字符串 元组。说你已经写了一个这样做的功能,叫做 >>> mylst = [(1,2), (3,4), (5,6)] >>> print dict(mylst) {1:2, 3:4, 5:6} ,它接受​​两个字符串并返回一个元组。那你可以 编写如下所示的生成器表达式,以便您不需要加载 在您创建字典之前,所有内容都将进入内存。

split_item

然后只需在生成器函数上调用def generate_tuples(table): length = len(table) for i in range(1, length - 1): yield split_item(table[i-1], table[i]) 内置函数。

dict

既然你说你已经用for循环写了这个,我猜你已经写了>>> dict(generate_tuples(table)) 函数了。

加快速度

以下是Ian Ozsvald撰写的high-performance Python指南,可以帮助您尝试其他方法来提高处理速度。 (归功于@AndrewWalker的SO post here

答案 1 :(得分:1)

这就是你要追求的吗?

dict( (t.rsplit(':', 3)[0], t) for t in table ) )