use*_*650 5 python arrays numpy
我有一个固定数量的形式的int数组:
[a,b,c,d,e]
Run Code Online (Sandbox Code Playgroud)
例如:
[2,2,1,1,2]
Run Code Online (Sandbox Code Playgroud)
其中a和b可以是整数0至2,c并且d可以是0或1,并且e可以是整数0至2.
因此有:3 * 3 * 2 * 2 * 3:108这种形式的可能的阵列.
我想为每个数组分配一个0到107的唯一整数代码.
我被卡住了,我想添加数组中的每个数字,但是两个数组如:
[0,0,0,0,1] and [1,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
都会加1.
有什么建议吗?
谢谢.
Pau*_*zer 16
你可以使用np.ravel_multi_index:
>>> np.ravel_multi_index([1, 2, 0, 1, 2], (3, 3, 2, 2, 3))
65
Run Code Online (Sandbox Code Playgroud)
验证:
>>> {np.ravel_multi_index(j, (3, 3, 2, 2, 3)) for j in itertools.product(*map(range, (3,3,2,2,3)))} == set(range(np.prod((3, 3, 2, 2, 3))))
True
Run Code Online (Sandbox Code Playgroud)
回到另一个方向:
>>> np.unravel_index(65, dims=(3, 3, 2, 2, 3))
(1, 2, 0, 1, 2)
Run Code Online (Sandbox Code Playgroud)