【发布时间】:2019-03-30 11:26:00
【问题描述】:
我有以下代码,我想根据给定条件从其他列表中提取某些值。但是我的数据集很大,每个列表中有 100 万个值。因此这种嵌套循环的方法耗时太长。是否有使用 Numpy 的矢量化或更快的方法,我可以使用它来加速我的代码并使用更少的内存?
import random
import numpy as np
x=[random.randrange(0,10) for _ in range(0,100)]
y=[random.randrange(0,10) for _ in range(0,100)]
z=[random.randrange(0,10) for _ in range(0,100)]
x_unique=np.unique(x)
xx_list=[]
y_list=[]
z_list=[]
for i in range(len(x_unique)):
xx_list.append([])
y_list.append([])
z_list.append([])
for ii, i in enumerate(x_unique):
for j,k in enumerate(x):
if i == k:
xx_list[ii].append(x[j])
y_list[ii].append(y[j])
z_list[ii].append(z[j])
[编辑:添加了预期的示例]
在列表:y_list 和 z_list 中,我想存储与 xx_list 中存储的相同索引号对应的值。
例如考虑以下示例列表:
x = [0.1,0.1,1,0.1,2,1,0.1]
y = [1.1,2.1,3,4,5,6,7]
z = [10,11,12,13.1,14,15,16]
因此,x_unique 如下:
x_unique = [0.1,1,2]
xx_list、y_list 和 z_list 应包含以下内容:
xx_list = [[0.1,0.1,0.1,0.1],[1,1],[2]]
y_list = [[1.1,2.1,4,7],[3,6],[5]]
z_list = [[10,11,13.1,16],[12,15],[14]]
【问题讨论】:
-
您能描述一下您想要实现的目标吗(
xx_list、y_list和z_list中应该是什么)? -
@cglacet 请检查我的编辑。我已经包含了一个我希望代码执行的示例。
标签: python list numpy vectorization nested-loops