如果要混合數據類型,您將需要structured arrays。
如果你打算要在查找數組匹配值的索引你想searchsorted
你舉的例子是這樣的:
>>> 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'))
你的結構化數組:
>>> PS
array([('A', 'LABEL1', 20), ('B', 'LABEL2', 15), ('C', 'LABEL3', 120),
('D', 'LABEL1', 3)],
dtype=[('f0', '|S1'), ('f1', '|S6'), ('f2', '<i4')])
>>> FACTOR
array([('LABEL1', 0.10000000149011612), ('LABEL2', 0.5), ('LABEL3', 10.0)],
dtype=[('f0', '|S6'), ('f1', '<f4')])
你可以像這樣訪問各個領域(或者你可以給他們的名字,看文檔):
>>> FACTOR['f0']
array(['LABEL1', 'LABEL2', 'LABEL3'],
dtype='|S6')
如何在PS進行因子的查找(FACTOR必須進行排序):
>>> 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)
現在只需要創建一個新的陣列和乘法:
>>> 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')])
感謝您指出錯誤的數組名稱。修正了標題和內容 –