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

标签 python arrays numpy

我有固定数量的以下形式的 int 数组:

[a,b,c,d,e]

例如:

[2,2,1,1,2]

其中ab可以是0到2的整数,cd可以是0或1,e 可以是 0 到 2 之间的整数。

因此有:3 * 3 * 2 * 2 * 3:108 这种形式的可能数组。

我想为每个数组分配一个从 0 到 107 的唯一整数代码。

我卡住了,我想把数组中的每个数字相加,但是有两个数组,例如:

[0,0,0,0,1] and [1,0,0,0,0]

都会加到 1。

有什么建议吗?

谢谢。

最佳答案

你可以使用 np.ravel_multi_index :

>>> np.ravel_multi_index([1, 2, 0, 1, 2], (3, 3, 2, 2, 3))
65

验证:

>>> {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

往回走:

>>> np.unravel_index(65, dims=(3, 3, 2, 2, 3))
(1, 2, 0, 1, 2)

关于python - 将整数数组编码为唯一的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48411962/

相关文章:

python - 当涉及无穷大值时, Pandas 滚动返回 NaN

python - 在片段着色器中访问 3D 数组

javascript - 如何在不使用索引的情况下访问 JSON 数组值

python - 如何在Python中使用raw_input()在特定字符之后停止读取用户输入?

python - 在 pandas DataFrame 中查找列的值最大的行

c - 变量类型结构体是否必须是数组才能存储 100 个元素?

arrays - 修改解析的 CSV 文件输出,很快吗?

python - 按列合并两个数组

c - 编写 numpy ufunc 时如何处理复数值?

python - 在 Python 中分析时间序列 - pandas 格式错误 - statsmodels