gpt4 book ai didi

python - 将集合转换为 numpy 0-1 数组?

转载 作者:行者123 更新时间:2023-12-01 02:41:36 26 4
gpt4 key购买 nike

我目前正在使用此方法将一组整数(变量 words)转换为 numpy 数组:

    wordMask = np.asarray( [ int(x not in words)  for x in xrange(0,nwords) ] ).reshape(nwords,1)

这里nwords可以大到10000。

每次我可以将 wordMask 保留为单独的变量时,并且每当我从 words 添加/删除元素时,我都会对 进行相应的更改,而不是重新计算 wordMask wordMask,但我想知道是否有一种相当有效的方法来重新计算 wordMask

编辑:我主要关心的是列表理解:

[ x not in words for x in xrange(0,nwords) ]

会很慢,我正在寻找一种更快的方法来执行该迭代在创建 numpy 数组的上下文中。

最佳答案

让我们从这个示例代码开始:

import numpy as np

words = set([1, 3, 5, 7, 9])
nwords = len(words)
wordMask = np.asarray([ [int(x not in words)] for x in xrange(0, nwords) ])

我更改了 asarray 代码,从一开始就自动 reshape 它的形状。现在您已经有了单词掩码,每当您添加或删除单词时就可以轻松更新。

添加一个词:

newWord = 4
words.add(newWord)
nwords = len(words)
wordMask = np.concatenate((wordMask, [[1]])) # Resize the mask
if newWord < nwords: # Update the mask
wordMask[newWord][0] = 0

删除一个单词:

oldWord = 3
if oldWord < nwords: # Update the mask
wordMask[oldWord][0] = 1
words.discard(oldWord)
nwords = len(words)
wordMask = np.resize(wordMask, (nwords, 1)) # Resize the mask

这就是你想要的!

我个人会使用字典,因为它们更容易处理。我猜你选择使用 NumPy 是为了提高内存效率? NumPy 总是在调整大小时复制数组,因此 concatenate() 和 resize() 方法不一定很快。一种选择是将掩码设置为固定大小(上限)并在发生变化时进行更新。这样效率会高得多。

如果保证最大大小为10000,则从上面的代码中删除大小更新,并将nwords设置为10000。

关于python - 将集合转换为 numpy 0-1 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com