首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vectorize_sequences的标准实现

vectorize_sequences的标准实现
EN

Stack Overflow用户
提问于 2021-07-17 16:35:49
回答 1查看 146关注 0票数 2

弗朗索瓦·乔莱https://www.manning.com/books/deep-learning-with-python中,显示如下函数:

代码语言:javascript
复制
def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results

我明白这个功能是干什么的。这个函数在这个怪胎这个问题中都有查询,还提到了这里这里这里这里这里这里。尽管范围如此之广,但根据Chollet的书,这种矢量化是“手动完成的,以达到最大的清晰度”。我感兴趣的是是否有一个标准,而不是“手册”的做法。

是否有一个标准的Keras / Tensorflow / Scikit-learn / Pandas / Numpy实现的函数,其行为与上面的函数非常相似?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-17 17:27:03

使用MultiLabelBinarizer的解决方案

假设sequences是一个整数数组,其最大值可达到dimension-1,我们可以使用sklearn.preprocessing中的MultiLabelBinarizer来复制函数vectorize_sequences的行为。

代码语言:javascript
复制
from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer(classes=range(dimension))
mlb.fit_transform(sequences)

Numpy广播的解决方案

假设sequences是一个整数数组,其最大值可达dimension-1

代码语言:javascript
复制
(np.array(sequences)[:, :, None] == range(dimension)).any(1).view('i1')

算例

代码语言:javascript
复制
>>> sequences
[[4, 1, 0], 
 [4, 0, 3],
 [3, 4, 2]]

>>> dimension = 10
>>> mlb = MultiLabelBinarizer(classes=range(dimension))
>>> mlb.fit_transform(sequences)

array([[1, 1, 0, 0, 1, 0, 0, 0, 0, 0],
       [1, 0, 0, 1, 1, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 0, 0, 0, 0, 0]])


>>> (np.array(sequences)[:, :, None] == range(dimension)).any(1).view('i1')

array([[0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [1, 0, 1, 0, 1, 0, 0, 0, 0, 0],
       [1, 1, 0, 0, 1, 0, 0, 0, 0, 0]])
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68422410

复制
相关文章

相似问题

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