numpy fromstring 已弃用,改用 frombuffer
numpy fromstring deprecated use frombuffer instead
在Python代码中使用numpy 1.18.1
` def printBoard(self):
当前 = self.player
其他 = self.player % 2 + 1
currBin = '{:049b}'.format(self.current_position)
currRev = currBin[::-1]
cArr = (np.fromstring(currRev,'u1') - ord('0'))*current
other_position = self.current_position^self.mask
othBin = '{:049b}'.format(other_position)
othRev = othBin[::-1]
oArr = (np.fromstring(othRev,'u1') - ord('0'))*other
tArr = oArr+cArr
brd = np.reshape(tArr,(7,7),order = 'F')
for y in range(bitBoard.HEIGHT,-1,-1):
for x in range(bitBoard.WIDTH):
print(brd[y,x],end = ' ')
print()
print()
`
行:
cArr = (np.fromstring(currRev,'u1') - ord('0'))*current
给出以下警告:
DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
cArr = (np.fromstring(currRev,'u1') - ord('0'))*current
将 'fromstring' 替换为 'frombuffer' 会出现以下错误:
cArr = (np.frombuffer(currRev,'u1') - ord('0'))*current
TypeError: a bytes-like object is required, not 'str'
尽管进行了一些谷歌搜索,但我找不到我应该使用的东西。有人可以帮忙吗?
谢谢。
艾伦
代码的相关部分是生成 currRev
的代码。由此我可以构建这个例子:
In [751]: astr = '{:049b}'.format(123)[::-1]
In [752]: astr
Out[752]: '1101111000000000000000000000000000000000000000000'
你的警告:
In [753]: np.fromstring(astr, 'u1')
/usr/local/bin/ipython3:1: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
#!/usr/bin/python3
Out[753]:
array([49, 49, 48, 49, 49, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48],
dtype=uint8)
frombuffer
想要一个字节串,所以让我们创建一个:
In [754]: astr.encode()
Out[754]: b'1101111000000000000000000000000000000000000000000'
In [755]: np.frombuffer(astr.encode(),'u1')
Out[755]:
array([49, 49, 48, 49, 49, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48],
dtype=uint8)
该行的其余部分:
In [756]: _-ord('0')
Out[756]:
array([1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0], dtype=uint8)
获取相同数组的另一种方法:
In [758]: np.array(list(astr),'uint8')
Out[758]:
array([1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0], dtype=uint8)
在Python代码中使用numpy 1.18.1
` def printBoard(self): 当前 = self.player 其他 = self.player % 2 + 1
currBin = '{:049b}'.format(self.current_position)
currRev = currBin[::-1]
cArr = (np.fromstring(currRev,'u1') - ord('0'))*current
other_position = self.current_position^self.mask
othBin = '{:049b}'.format(other_position)
othRev = othBin[::-1]
oArr = (np.fromstring(othRev,'u1') - ord('0'))*other
tArr = oArr+cArr
brd = np.reshape(tArr,(7,7),order = 'F')
for y in range(bitBoard.HEIGHT,-1,-1):
for x in range(bitBoard.WIDTH):
print(brd[y,x],end = ' ')
print()
print()
`
行:
cArr = (np.fromstring(currRev,'u1') - ord('0'))*current
给出以下警告:
DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
cArr = (np.fromstring(currRev,'u1') - ord('0'))*current
将 'fromstring' 替换为 'frombuffer' 会出现以下错误:
cArr = (np.frombuffer(currRev,'u1') - ord('0'))*current
TypeError: a bytes-like object is required, not 'str'
尽管进行了一些谷歌搜索,但我找不到我应该使用的东西。有人可以帮忙吗?
谢谢。
艾伦
代码的相关部分是生成 currRev
的代码。由此我可以构建这个例子:
In [751]: astr = '{:049b}'.format(123)[::-1]
In [752]: astr
Out[752]: '1101111000000000000000000000000000000000000000000'
你的警告:
In [753]: np.fromstring(astr, 'u1')
/usr/local/bin/ipython3:1: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
#!/usr/bin/python3
Out[753]:
array([49, 49, 48, 49, 49, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48],
dtype=uint8)
frombuffer
想要一个字节串,所以让我们创建一个:
In [754]: astr.encode()
Out[754]: b'1101111000000000000000000000000000000000000000000'
In [755]: np.frombuffer(astr.encode(),'u1')
Out[755]:
array([49, 49, 48, 49, 49, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48],
dtype=uint8)
该行的其余部分:
In [756]: _-ord('0')
Out[756]:
array([1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0], dtype=uint8)
获取相同数组的另一种方法:
In [758]: np.array(list(astr),'uint8')
Out[758]:
array([1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0], dtype=uint8)