首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从一系列数字生成二进制数据数组

从一系列数字生成二进制数据数组
EN

Stack Overflow用户
提问于 2017-12-06 22:37:35
回答 1查看 1.5K关注 0票数 2

我需要创建布尔/二进制数组,行表示给定范围内每个数字的二进制形式。每一列都保存给定位位置的值。范围由位宽和二进制编码方案决定.然后,我需要计算列中与前一个单元格不匹配的单元格数。

我相信计数过程只是简单的XORing数组,其本身向下移动了一行。XOR结果中每一列的和是我的转换计数。

我需要对以十六进制、八进制、十进制编码的每个有符号、无符号值的组合执行此操作。编码方案与可用比特之间的不匹配导致不可用比特。

例如,4位无符号八进制数组仍然只有8行。但是,如果它是有符号的,那么第4位用于符号,数组是完整的16行。

最终目标是为不同位宽、编码和符号的使用在每个位位置上的转换数创建标记的汇总n-克集。例如,摘要n-克将是{3位,八进制,无符号,1,3,7}。摘要n-克,例如3是{4位,八进制,符号,1,2,6,13}.示例4是{4位,十六进制,签名,1,2,6,13}.

示例:

1)所有可能的3位无符号八进制值的 8x3二进制数组:

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

2)所有可能的4位无符号八进制值的 8x4二进制数组:

与#1相同,但所有零的最左边列除外

3)所有可能的4位带符号八进制值的 16x4二进制数组:

注:双计数0 (-0和+0) 1 1 1

1 1 1 0

1 1 0 1

1 1 0

1 0 1 1

1 0 1 0

1 0 0 1

1 0 0 0

0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

4)所有可能的4位带符号十六进制值的 16x4二进制数组:

与3号相同

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-06 22:55:04

例如,您可以使用np.unpackbits

代码语言:javascript
运行
复制
np.unpackbits(np.arange(8).astype(np.uint8)[:, None], axis = 1)

输出:

代码语言:javascript
运行
复制
array([[0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 1, 1],
       [0, 0, 0, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 1],
       [0, 0, 0, 0, 0, 1, 1, 0],
       [0, 0, 0, 0, 0, 1, 1, 1]], dtype=uint8)

切掉不需要的零:

代码语言:javascript
运行
复制
np.unpackbits(np.arange(8).astype(np.uint8)[:, None], axis = 1)[:, -3:]

结果:

代码语言:javascript
运行
复制
array([[0, 0, 0],
       [0, 0, 1],
       [0, 1, 0],
       [0, 1, 1],
       [1, 0, 0],
       [1, 0, 1],
       [1, 1, 0],
       [1, 1, 1]], dtype=uint8)

对有符号值使用模块化:

代码语言:javascript
运行
复制
np.unpackbits((np.arange(-4, 4)%8).astype(np.uint8)[:, None], axis = 1)[:, -3:]

或查看从签名到未签名的转换:

代码语言:javascript
运行
复制
np.unpackbits(np.arange(-4, 4).astype(np.int8).view(np.uint8)[:, None], axis = 1)[:, -3:]

结果:

代码语言:javascript
运行
复制
array([[1, 0, 0],
       [1, 0, 1],
       [1, 1, 0],
       [1, 1, 1],
       [0, 0, 0],
       [0, 0, 1],
       [0, 1, 0],
       [0, 1, 1]], dtype=uint8)

过渡计数:

代码语言:javascript
运行
复制
x = np.unpackbits(np.arange(-4, 4).astype(np.int8).view(np.uint8)[:, None], axis = 1)[:, -3:]
np.abs(np.diff(x.view(np.int8), axis=0)).sum(axis=1)

结果:

代码语言:javascript
运行
复制
array([1, 2, 1, 3, 1, 2, 1])

或者使用xor方法:

代码语言:javascript
运行
复制
(x[1:]^x[:-1]).sum(axis=1)

结果:

代码语言:javascript
运行
复制
array([1, 2, 1, 3, 1, 2, 1], dtype=uint64)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47684650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档