我有一個像這樣的數字的numpy數組:cols = np.arange(1, 6)
。我想在每列數字前加上字母't'。我寫的followind祿:迭代使用lambda的numpy數組
f = lambda x: 't' + str(x)
temp = f(cols)
print(temp)
我得到的輸出是這樣的:
t[1 2 3 4 5].
我需要的輸出爲[ 'T1', 'T2', 'T3' ...]。我需要做1000個數字。我究竟做錯了什麼?
我有一個像這樣的數字的numpy數組:cols = np.arange(1, 6)
。我想在每列數字前加上字母't'。我寫的followind祿:迭代使用lambda的numpy數組
f = lambda x: 't' + str(x)
temp = f(cols)
print(temp)
我得到的輸出是這樣的:
t[1 2 3 4 5].
我需要的輸出爲[ 'T1', 'T2', 'T3' ...]。我需要做1000個數字。我究竟做錯了什麼?
您可以使用np.core.char.add
:
np.core.char.add('t', np.arange(1,6).astype(str))
#array(['t1', 't2', 't3', 't4', 't5'],
# dtype='|S12')
它的速度更快,然後list(map(...))
爲大型陣列:
%timeit np.core.char.add('t', np.arange(1,100000).astype(str))
# 10 loops, best of 3: 31.7 ms per loop
f = lambda x: 't' + str(x)
%timeit list(map(f, np.arange(1,100000).astype(str)))
# 10 loops, best of 3: 38.8 ms per loop
我的電腦速度差異更大:''np.core.char.add'爲82.6ms','list(map(...))'爲'163ms'。 –
你的問題是,你的功能應用到整個陣列。你基本上在做:
't' + str(cols)
哪個當然不起作用。您需要應用它元素 -wise:
list(map(f, cols)) # No need for list() if using Python 2
你可以用列表理解來做到這一點:
['t' + str(x) for x in cols]
['t1', 't2', 't3', 't4', 't5', 't6']
這將追加 'T' 中收集的cols每個元素x
。
lambda
函數是一個匿名函數,所以您通常會將它傳遞給期望可調用對象的函數。
lambda的想法是,它是匿名的,所以你不需要將它分配給一個變量。 – Vinny