import numpy as np
A和B阵列状况良好。
A = np.array(['a','b','c','d','e'])
B = np.array([5,7,3,9,11])
C = np.array(['a','b','k','j','p','x'])
对于数组C的每个元素,如果该元素在A中,则从B的相同位置的B获取值。如果不在A中,则写入np.nan。
预期结果将是:
result = np.array([5,7,na,na,na,na])
如何在numPy中以轻松的方式做到这一点?
答案 0 :(得分:4)
您可以使用np.in1d(C, A)
来确定C
中是否有A
。
In [110]: np.in1d(C, A)
Out[115]: array([ True, True, False, False, False], dtype=bool)
然后使用np.where
从B
或np.nan
中选择所需的值:
In [116]: np.where(np.in1d(C, A), B, np.nan)
Out[116]: array([ 5., 7., nan, nan, nan])
np.where(cond, B, np.nan)
返回与布尔数组cond
形状相同的数组。
如果B
中的相应值为True,则返回的数组将从cond
获取值,否则为np.nan
。
如果len(C) > len(B)
,并且您希望最终数组包含最后NaN
值的len(C)-len(B)
,那么您可以使用:
N = len(B)
result = np.full(len(C), np.nan)
result[:N] = np.where(np.in1d(C[:N], A), B, np.nan)