我有一个numpy数组,它有数百个大写字母元素,没有特别的顺序
import numpy as np
abc_array = np.array(['B', 'D', 'A', 'F', 'H', 'I', 'Z', 'J', ...])
此numpy.ndarray
中的每个元素都是numpy.string_
。
我还有一个“翻译词典”,其键/值对使得大写字母对应一个城市
transdict = {'A': 'Adelaide', 'B': 'Bombay', 'C': 'Cologne',...}
字典transdict
中只有26对,但是我必须翻译的numpy数组中有数百个字母。
最有效的方法是什么?
我考虑过使用numpy.core.defchararray.replace(a, old, new, count=None)[source]
,但这会返回ValueError
,因为numpy数组与字典键/值的大小不同。
AttributeError: 'numpy.ndarray' object has no attribute 'translate'
答案 0 :(得分:6)
使用暴力 NumPy broadcasting
-
Fatal error: Uncaught exception `'Abraham\TwitterOAuth\TwitterOAuthException'` with message
'<?xml version="1.0" encoding="UTF-8"?>
<hash>
<error>Desktop applications only support the oauth_callback value 'oob'</error>
<request>/oauth/request_token</request>
</hash> '
in `/home/mediahyp/public_html/tweetme/twitteroauth/src/TwitterOAuth.php:138`
Stack trace:
#0 /home/mediahyp/public_html/tweetme/twitter-go.php(13): Abraham\TwitterOAuth\TwitterOAuth->oauth('oauth/request_t...', Array)
#1 {main} thrown in /home/mediahyp/public_html/tweetme/twitteroauth/src/TwitterOAuth.php on line 138
基于np.searchsorted
的搜索和索引 -
idx = np.nonzero(transdict.keys() == abc_array[:,None])[1]
out = np.asarray(transdict.values())[idx]
示例运行 -
sort_idx = np.argsort(transdict.keys())
idx = np.searchsorted(transdict.keys(),abc_array,sorter = sort_idx)
out = np.asarray(transdict.values())[sort_idx][idx]
答案 1 :(得分:4)
import numpy as np
abc_array = np.array(['B', 'D', 'A', 'F', 'H', 'I', 'Z', 'J'])
transdict = {'A': 'Adelaide',
'B': 'Bombay',
'C': 'Cologne',
'D': 'Dresden',
'E': 'Erlangen',
'F': 'Formosa',
'G': 'Gdansk',
'H': 'Hague',
'I': 'Inchon',
'J': 'Jakarta',
'Z': 'Zambia'
}
phoenetic = [transdict[letter] for letter in abc_array]
print ' '.join(phoenetic)
这个输出是:
Bombay Dresden Adelaide Formosa Hague Inchon Zambia Jakarta