首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标记较小列表中哪些元素在较大列表中的有效方法(Python)

标记较小列表中哪些元素在较大列表中的有效方法(Python)
EN

Stack Overflow用户
提问于 2015-10-26 14:31:24
回答 1查看 91关注 0票数 0

我正在将相当大的数据集从json解析为“传统”数据框架(行作为观察,列作为变量)。json对象包含每个观察的特征列表。我想把它转换成一个零一向量,它表示所讨论的观测是否具有这种特性。

我拥有的是“主列表”(包含所有可能的特性的列表)和观察列表(如json )。假设所有特征的个数为K,则每个观测的输出应该是长度K的0-1列表,标记每个特征是否适用于该观测。

我目前的方法是“蛮力”迭代:

代码语言:javascript
复制
characteristics #master list of all possibilities
output_dataset = []

for observation in data:
   chars = observation["characteristics"]
   vector = [ int(chr in chars) for chr in characteristics ]
   output_dataset.append(vector)

然而,这在计算上是相当昂贵的,当特征数增加到数千个,而观测到成千上万个时。

是否有更有效的方法(一般情况下,或者特别是在Python/Numpy/Pandas中)?

更新:

为了清晰,举个例子,下面是不同的变量应该是什么样子的。(想象一下,观测结果是移动设备。)

主列表:["android", "ios", "windows", "phone", "tablet", "dual-sim", "fingerprint", "nfc", "usb-c", "lg", "samsung", "huawei", "htc", "motorola", "apple", "google", "nokia"...]

一项观察:["android", "phone", "fingerprint", "nfc", "lg"...]

期望输出矢量:[1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,...]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 15:56:32

我不太确定我能理解,但我想你想用个白痴。dict是对任意键值执行查找的有效方法。在长度为N的列表中查找键是O(N),在dict中查找键是通过哈希表进行优化的。取决于算法和可用内存,在O(1)和O(ln,N)之间。

因此,首先将特征转换为dict,将特征映射到索引数,索引编号是它在characteristics中的位置。

代码语言:javascript
复制
chardict = {}
for i,v in enumerate(characteristics):
    chardict[v] = i

现在,您有了一种有效的方法,可以将特征映射到向量中正确位置的1

代码语言:javascript
复制
vector = [0] * len(characteristics) # initialize all zero, correct length
for k in observation["characteristics"]:
    if  k in chardict: 
        vector[ chardict[k]] = 1

使用dict的get方法可能更有效,通过这种方法,您还可以现在或以后检查不良的输入数据。不过不太清楚。

代码语言:javascript
复制
L = len(characteristics)
vector = [0] * (L+1)    # last bin for junk input
for k in observation["characteristics"]:
     vector[ chardict.get(k, L) ] = 1

if vector[L]:
    # there was an input not known to characteristics ....

del vector[L]   # get rid of the last element if no longer wanted
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33348311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档