2017-08-30 68 views
1

我有一個像這樣的數字的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個數字。我究竟做錯了什麼?

+0

lambda的想法是,它是匿名的,所以你不需要將它分配給一個變量。 – Vinny

回答

8

您可以使用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 
+1

我的電腦速度差異更大:''np.core.char.add'爲82.6ms','list(map(...))'爲'163ms'。 –

2

你的問題是,你的功能應用到整個陣列。你基本上在做:

't' + str(cols) 

哪個當然不起作用。您需要應用它元素 -wise:

list(map(f, cols)) # No need for list() if using Python 2 
3

你可以用列表理解來做到這一點:

['t' + str(x) for x in cols] 
['t1', 't2', 't3', 't4', 't5', 't6'] 

這將追加 'T' 中收集的cols每個元素x

lambda函數是一個匿名函數,所以您通常會將它傳遞給期望可調用對象的函數。