我有一个带有整数条目的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]])
动机:我有一个数组,其中单位向量的索引作为条目,我需要将其转换为一个数组,其中向量作为条目。
答案 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]])