【发布时间】:2018-12-30 10:50:03
【问题描述】:
我正在尝试将整数数组转换为它们在 python 中的二进制表示。我知道原生 python 有一个名为bin 的函数可以做到这一点。 Numpy 也有类似的功能:numpy.binary_repr。
问题是这些都不是矢量化方法,因为它们一次只取一个值。因此,为了让我转换整个输入数组,我必须使用 for 循环并多次调用这些函数,这不是很有效。
有没有什么方法可以在没有 for 循环的情况下执行这种转换?这些函数是否有任何矢量化形式?我试过numpy.apply_along_axis 但没有运气。我也尝试过使用np.fromiter 和map,但也没有成功。
我知道类似的问题已经被问过几次(例如here),但给出的答案实际上都没有向量化。
将不胜感激指出我的任何方向!
谢谢 =)
【问题讨论】:
-
只是出于好奇,您的数据有多大?只需对 1MM 项目运行简单的
[np.binary_repr(z) for z in x]列表理解并使用1.41 s ± 182 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) -
我将使用的数据集可能不会那么大,通常在 1,000 左右,也许 10,000 左右。但我将不得不多次评估目标函数以进行优化,因此我试图在找到的每个角落都减少一些处理时间。
-
你的整数有多少位,它们是有符号的还是无符号的?
-
无符号整数 - 我只会使用正整数。我必须转换的最大 int 可能是 10,000。所以可能 16 位就可以了。
标签: python arrays numpy binary vectorization