gpt4 book ai didi

Python:将 numpy 符号数组转换为 int 并返回

转载 作者:行者123 更新时间:2023-11-28 17:25:49 24 4
gpt4 key购买 nike

我正在尝试将一个 numpy 符号数组(即一个 numpy 数组,其条目为 1.-1.)转换为一个整数,并且通过二进制表示返回。我有一些有用的东西,但它不是 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]

最佳答案

对于一维数组,您可以使用这种线性 Numpythonic 方法,使用 np.packbits:

>>> np.packbits(np.pad((s0+1).astype(bool).astype(int), (8-s0.size, 0), 'constant'))
array([11], dtype=uint8)

对于反转:

>>> unpack = (np.unpackbits(np.array([11], dtype=np.uint8))[-4:]).astype(float)
>>> unpack[unpack==0] = -1
>>> unpack
array([ 1., -1., 1., 1.])

对于二维数组:

>>> x, y = s.shape
>>> np.packbits(np.pad((s+1).astype(bool).astype(int), (8-y, 0), 'constant')[-2:])
array([5, 7], dtype=uint8)

对于反转:

>>> unpack = (np.unpackbits(np.array([5, 7], dtype='uint8'))).astype(float).reshape(x, 8)[:,-y:]
>>> unpack[unpack==0] = -1
>>> unpack
array([[ 1., -1., 1.],
[ 1., 1., 1.]])

关于Python:将 numpy 符号数组转换为 int 并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39176308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com