此问题用于python。例如,如果我有一个数组,其中的元素是字符串。我可以使用len()函数打印出每个元素的长度吗?
import numpy as np
arr = np.array(["qwerty", "uiop", "as"])
# and here is the actual example
arr.len()
您可能猜到那最后一行不起作用,但是如果有这样的事情,我真的很感激,我设法找到了它<3
我的目标是找到比for循环更好的东西。 预先谢谢你!
答案 0 :(得分:0)
您可以使用np.vectorize
方法,并将其应用于内置的len
函数:
vect_len = np.vectorize(len)
>>> vect_len(arr)
array([6, 4, 2])
请注意,这摆脱了您的显式循环,但是实现仍然是幕后的循环。如文档所述:
提供矢量化功能主要是为了方便,而不是为了提高性能。实现本质上是一个for循环。
您也可以使用np.frompyfunc
来获得相同的效果,并且在大型数组上可能会看到更好的性能(但可读性较差):
vect_len2 = np.frompyfunc(len, 1, 1)
>>> vect_len2(arr)
array([6, 4, 2], dtype=object)
在大型数据帧上测试性能
import timeit
arr = np.random.choice(arr,1000000)
vect_len = np.vectorize(len)
vect_len2 = np.frompyfunc(len, 1, 1)
def using_vectorize(arr=arr):
return vect_len(arr)
def using_frompyfunc(arr=arr):
return vect_len2(arr)
>>> timeit.timeit(using_vectorize,number=10)/10
0.17760197920142673
>>> timeit.timeit(using_frompyfunc,number=10)/10
0.11580852449988015
frompyfunc
往往会做得更好,但是您只会在大型数组上看到明显的差异
老实说,一个好的旧列表理解可以替代小型数组(尽管您说过不希望循环):
>>> [len(i) for i in arr]
[6, 4, 2]