<p>如果您想混合数据类型,您需要<a href="http://docs.scipy.org/doc/numpy/user/basics.rec.html" rel="nofollow">structured arrays</a>。在</p>
<p>如果您想要查找数组中匹配值的索引,<code>searchsorted</code></p>
<p>你的例子是这样的:</p>
<pre><code>>>> import numpy as np
>>> PS = np.array([
('A', 'LABEL1', 20),
('B', 'LABEL2', 15),
('C', 'LABEL3', 120),
('D', 'LABEL1', 3),], dtype=('a1,a6,i4'))
>>> FACTOR = np.array([
('LABEL1', 0.1),
('LABEL2', 0.5),
('LABEL3', 10)],dtype=('a6,f4'))
</code></pre>
<p>您的结构化阵列:</p>
^{pr2}$
<p>您可以像这样访问单个字段(或者您可以给它们命名;请参阅文档):</p>
<pre><code>>>> FACTOR['f0']
array(['LABEL1', 'LABEL2', 'LABEL3'],
dtype='|S6')
</code></pre>
<p>如何在PS上查找因子(因子必须排序):</p>
<pre><code>>>> idx = np.searchsorted(FACTOR['f0'], PS['f1'])
>>> idx
array([0, 1, 2, 0])
>>> FACTOR['f1'][idx]
array([ 0.1, 0.5, 10. , 0.1], dtype=float32)
</code></pre>
<p>现在只需创建一个新数组并乘法:</p>
<pre><code>>>> newp = PS.copy()
>>> newp['f2'] *= FACTOR['f1'][idx]
>>> newp
array([('A', 'LABEL1', 2), ('B', 'LABEL2', 7), ('C', 'LABEL3', 1200),
('D', 'LABEL1', 0)],
dtype=[('f0', '|S1'), ('f1', '|S6'), ('f2', '<i4')])
</code></pre>