从NumPy数组中获取价值

时间:2015-09-05 02:22:49

标签: python numpy

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中以轻松的方式做到这一点?

1 个答案:

答案 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.whereBnp.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)