【发布时间】:2017-01-03 17:12:59
【问题描述】:
我正在尝试从一个 numpy 符号数组(即,一个其条目为 1. 或 -1. 的 numpy 数组)转换为整数,然后通过二进制表示形式返回。我有一些可行的方法,但它不是 Pythonic,我预计它会很慢。
def sign2int(s):
s[s==-1.] = 0.
bstr = ''
for i in range(len(s)):
bstr = bstr + str(int(s[i]))
return int(bstr, 2)
def int2sign(i, m):
bstr = bin(i)[2:].zfill(m)
s = []
for d in bstr:
s.append(float(d))
s = np.array(s)
s[s==0.] = -1.
return s
然后
>>> m = 4
>>> s0 = np.array([1., -1., 1., 1.])
>>> i = sign2int(s0)
>>> print i
11
>>> s = int2sign(i, m)
>>> print s
[ 1. -1. 1. 1.]
我担心 (1) 每个中的 for 循环和 (2) 必须将中间表示构建为字符串。
最终,我也会想要一些适用于二维 numpy 数组的东西——例如,
>>> s = np.array([[1., -1., 1.], [1., 1., 1.]])
>>> print sign2int(s)
[5, 7]
【问题讨论】:
-
你在真实数据集上试过了吗?它有多大?
-
我期望看到的最大数据集将包含约 1000 个元素的符号数组,但符号数组的数量可能达到数十亿——一个非常高的矩阵。 @二战
-
既然你提到了它,我相信这只有在符号数组最多有 64 个元素时才有效。 @二战
-
换句话说 - ~1000 位整数?
-
对。 :) 将有许多数据集,每个符号向量的元素少于 100 个。但我可能会尝试使用多个 64 位整数。下面的答案已经有很大帮助。谢谢@wwii!
标签: python arrays numpy binary