用numpy数组替换numpy数组的条目



我有一个大小为((s1,…sm))的numpy数组a,其中包含整数条目,还有一个字典D,其中整数作为键,大小为(t))的numpy数组作为值。我想对数组A的每个条目的字典进行评估,以获得大小为(s1,…sm,t)的新数组B。

例如

D={1:[0,1],2:[1,0]}
A=np.array([1,2,1])

输出为

array([[0,1],[1,0],[0,1]])

动机:我有一个以单位向量的索引为条目的数组,我需要将其转换为以向量为条目的阵列。

如果可以将键重命名为0索引,则可以对单位向量使用直接数组查询:

>>> units = np.array([D[1], D[2]])
>>> B = units[A - 1]    # -1 because 0 indexed: 1 -> 0, 2 -> 1
>>> B
array([[0, 1],
       [1, 0],
       [0, 1]])

类似地,对于任何形状:

>>> A = np.random.random_integers(0, 1, (10, 11, 12))
>>> A.shape
(10, 11, 12)
>>> B = units[A]
>>> B.shape
(10, 11, 12, 2)

您可以在numpy文档上了解更多关于高级索引的信息

>>> np.asarray([D[key] for key in A])
array([[0, 1],
       [1, 0],
       [0, 1]])

这里有一种方法,使用np.searchsorted来定位那些要索引到字典值中的行索引,然后简单地对其进行索引以获得所需的输出,比如so-

idx = np.searchsorted(D.keys(),A)
out = np.asarray(D.values())[idx]

样品运行-

In [45]: A
Out[45]: array([1, 2, 1])
In [46]: D
Out[46]: {1: [0, 1], 2: [1, 0]}
In [47]: idx = np.searchsorted(D.keys(),A)
    ...: out = np.asarray(D.values())[idx]
    ...: 
In [48]: out
Out[48]: 
array([[0, 1],
       [1, 0],
       [0, 1]])

相关内容

  • 没有找到相关文章

最新更新