将整数数组编码为唯一的int

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)

其中ab可以是整数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)