【发布时间】:2019-03-15 04:51:23
【问题描述】:
考虑以下几点:
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]
这是所需的输出。问题是我的“矩阵”实际上是 ≈ 1000000 x 2200,我有 6700 个向量可以比较。我在这里的解决方案太慢了,无法尝试。
如何改进我的工作?
值得注意的是,matr 内部的值来自一组约 30000 个值,而我拥有完整的一组。我已经考虑了解决方案,我对每个向量制作这 30000 个值的字典,并使用字典在整个矩阵中转换为真/假,然后按行求和。我不确定这是否会有所帮助。
【问题讨论】:
-
在实际用例中所有元素都是单个字符吗?
-
我这样描述的错。绝对不会接近 12-13 个字符。
-
6700 vectors的长度是否相同?这些向量的典型长度是多少? -
不幸的是他们不是。有些小到 50 左右,但都在 10 到 1000 之间。