我有两个包含字符串的数组。对于一个数组中的每个字符串,我想检查它是否以第二个数组中的字符串结尾。numpy vectorized:检查数组中的字符串是否以另一个数组中的字符串结尾
输入:
strings = ['val1', 'val2', 'val3']
ends = ['1', '2', 'al1']
希望的输出:
[[ True, False, True],
[False, True, False],
[False, False, False]]
val1
如在1
以及在al1
结束时,两个(0,0)和(0,2)为真。
我有以下工作代码:
import numpy as np
strings = ['val1', 'val2', 'val3']
ends = ['1', '2', 'al1']
def buildFunction(ending):
return lambda x: x.endswith(ending)
funcs = list(map(buildFunction, ends))
def end_function_vector(val):
return np.vectorize(lambda f, x: f(x))(funcs, np.repeat(val, len(funcs)))
result = np.array(list(map(end_function_vector, strings)))
,并返回所需的输出。
然而,对于大阵列(〜10 9 输出元素)中的最后一行的map
花费相当长的一段,因为np.vectorize
和map
是几乎围绕只是一个包装一个for循环。有谁知道更快,矢量化的方法来做到这一点?
认为你可以简单地做:'np.core.defchararray.endswith(A [:,无],B)',我们有一个赢家! – Divakar
很好的实施!它的工作速度比OP的基础快4到5倍。 –