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

时间:2016-07-20 11:12:51

标签: numpy scipy linear-algebra

我有一个带有整数条目的numpy数组A((s1,... sm))和一个整数作为键的字典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]])

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

3 个答案:

答案 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 doc

上了解有关高级索引的详情

答案 1 :(得分:0)

这是一种方法,使用np.searchsorted来定位那些行索引以索引字典的值,然后简单地索引它以获得所需的输出,如下所示 -

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]])

答案 2 :(得分:0)

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