Python numpy'预期无符号字节数据类型的输入数组'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python numpy'预期无符号字节数据类型的输入数组'相关的知识,希望对你有一定的参考价值。

我想生成特定范围内的所有二进制数,到目前为止我的代码是:

int2binary = {}
largest_number = pow(2,16)
binary = np.unpackbits(np.array([range(largest_number)],dtype=np.uint16).T,axis=1)

由于生成的数字将高于8位二进制数可以显示,我已将qtype从np.uint8(可以工作)更改为np.uint16,然后返回错误:

binary = np.unpackbits(np.array([range(largest_number)],dtype=np.uint16).T,axis=1)
TypeError: Expected an input array of unsigned byte data type

我怎么能修复这个错误?我在NumpPy网站上查看了他们的数据类型,uint16就在那里,所以我不确定为什么这不起作用。

更新

使用Abhisek Roy的答案,错误不再存在。但是我忘了添加导致新错误的代码的导入部分:

int2binary[i] = b[i]
IndexError: index 1 is out of bounds for axis 0 with size 1

对于循环:

for i in range(largest_number):
    int2binary[i] = b[i]
答案

我想这就是你想要的。跑吧。有用。检查并告诉。

import numpy as np
int2binary = {}
largest_number = pow(2,16)
a=(np.array([range(largest_number)],dtype=np.uint8))
b = np.unpackbits(a, axis=1)
for row in b:
    x=row
for i in range(len(x)):
    int2binary[(i)] = x[i]
print(int2binary)
另一答案

uint16数组的视图('uint8')可以解决这个问题:

#! /usr/bin/python3

import numpy as np

print(np.__version__)
int2binary = {}

largest_number = pow(2,16)

A  = np.array(range(largest_number),dtype=np.uint16)

print(A)
print(A.ndim)
print(A.size)
print(A.flags)
print(A.itemsize)
print(A.nbytes)

B = A.view('uint8')

print(B)
print(B.ndim)
print(B.size)
print(B.flags)
print(B.itemsize)
print(B.nbytes)

binary = np.unpackbits(B)
print(binary)
print(binary.ndim)
print(binary.size)
print(binary.flags)
print(binary.itemsize)
print(binary.nbytes)

以上是关于Python numpy'预期无符号字节数据类型的输入数组'的主要内容,如果未能解决你的问题,请参考以下文章

从 numpy.uint8 数组中提取无符号字符

从文件中读取和存储任意字节长度的整数

php中pack 与 unpack函数的用法

在python中解压无符号短

如何创建一个紧密打包的无符号字节统一缓冲区?

C ++ wxsocket TCP服务器发送无符号字符数组但python客户端获得4个字节