2015-01-08 110 views
0

我想通過對np.array(range(5)).astype(str)給出的整個數組進行操作來獲得結果array(['0th', '1th', '2th', '3th', '4th'])。我嘗試這樣做:不受支持的操作數類型爲+:'numpy.ndarray'和'str'

>>> np.array(range(5)) 
array([0, 1, 2, 3, 4]) 
>>> np.array(range(5))*2 
array([0, 2, 4, 6, 8]) 
>>> np.array(range(5)).astype(str) 
array(['0', '1', '2', '3', '4'], 
    dtype='<U24') 
>>> np.array(range(5)).astype(str)+"th" 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'str' 

我知道我能做到這一點使用列表理解:

[ x+"th" for x in np.array(range(5)).astype(str) ] # can get the result, 

,但我希望有一個量化的方式做同樣的事情,如:

pandas.date_range("20150105",periods=16*7,freq="D").format(formatter=lambda x:x.strftime("%Y%m%d")) 

這可能嗎?

+0

你爲什麼不喜歡列表理解的ndarray元素?在我的測試中,速度更快。你的'pandas'表達式返回一個列表。 – hpaulj

+0

更快的列表操作''('{} th'.format,range(N))',模擬熊貓'格式'。 – hpaulj

回答

1

你可以做這樣的事情:

>>> np.core.defchararray.add(np.arange(5).astype(str), 'th') 
array(['0th', '1th', '2th', '3th', '4th'], 
     dtype='|S26') 
+1

或只是'np.char.add(np.arange(5).astype(str).astype(str),'th')' –

+0

它是'n​​p.char.add(np.arange(5).astype (str),'th')'優於'np.char.add(np.arange(5).astype(str).astype(str),'th')',一個astype(str)就可以。 –

+0

@it_is_a_literature糟糕,第二個'.astype(str)'只是一個錯字(它不應該有任何區別) –

0

可能的解決辦法:

>>> np.array([str(a) + 'th' for a in range(5)]) 
array(['0th', '1th', '2th', '3th', '4th'], 
     dtype='|S3') 
0

我目前沒有numpy的包在我的電腦,所以我真的不能測試,但在這裏是我的第一個想法。

np.array(range(5)).astype(str)彷彿回到了形式ndarray(list, str)

請問這作品?: print [ x+"th" for x in np.array(range(5)).astype(str)[0] ]

相關問題