考虑以下内容:
tmp1 = ['a', 'b', 'c', 'd', 'e']
tmp2 = ['f', 'g', 'h', 'b', 'd']
tmp3 = ['b', 'i', 'j', 'k', 'l']
matr = np.array([tmp1, tmp2, tmp3])
matr
生成一个矩阵:
array([['a', 'b', 'c', 'd', 'e'],
['f', 'g', 'h', 'b', 'd'],
['b', 'i', 'j', 'k', 'l']],
dtype='|S1')
现在,我想知道与一个向量相交的每行值的总和。比如说,
vec = ['a', 'c', 'f', 'b']
[sum([y in vec for y in row]) for row in matr]
返回,
[3, 2, 1]
这是所期望的输出结果。问题在于我的'matr'实际上是≈1000000 x 2200,而我有6700个向量要进行比较。我目前的解决方案速度太慢了,需要怎样改进呢?
值得注意的是,matr中的值来自一组约30000个值,并且我拥有完整的集合。我考虑过的解决方案是,对这30000个值与每个向量建立一个字典,在矩阵中使用字典将其转换为True/False,然后按行加和。但我不确定这是否有帮助。