【发布时间】:2013-08-01 06:57:18
【问题描述】:
我想知道是否有人知道如何在 Python 中对特征散列进行矢量化处理。 例如,这是我的代码:
import numpy as np
hashlen = 5
x = np.array([4, 7, 4, 2, 6, 8, 0, 6, 3, 1])
h = np.array([0, 3, 1, 2, 4, 2, 1, 0, 3, 1])
在特征散列中,h 表示我将 x 散列到的新向量的索引,即散列向量的索引 0 应该有 4 和 6 相加,索引 1 应该有 4、0 和 1 相加等. 得到的散列向量应该是:
w = np.array([ 10, 5, 10, 10, 6])
这样做的一种方法当然是循环遍历哈希索引,即:
for itr in range(hashlen):
w[itr] = np.sum(x[np.where(h==itr)])
对于大向量,复杂度是 hashlen(散列向量的长度)的函数。这可能需要很长时间,尤其是其中包含 np.where()。
我想做这样的事情:
w = np.zeros(hashlen)
w[h]+= x
但是这样做的结果和做的一样
w = np.zeros(hashlen)
w[h] = x
如果我在这里遗漏了什么,谁能告诉我?或者是否有一种“简单”的方式来进行特征散列而不涉及太多计算?
【问题讨论】:
标签: python arrays hash numpy vectorization