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中如何实现轻松的方式?
您可以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
如果in中的对应值为cond
True,则返回的数组将获取一个值,np.nan
否则为false。
如果为len(C) > len(B)
,并且您希望最终数组包含NaN
s作为最后一个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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句