首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >整理二维数组中的行项

整理二维数组中的行项
EN

Stack Overflow用户
提问于 2022-06-29 08:40:24
回答 2查看 49关注 0票数 -3

我有一个由1s和0组成的2d numpy数组。我想把每一行的1和0加起来。

代码语言:javascript
运行
复制
arr = 
[[0  1  0]
[ 0  0  0]
[ 1  1  1]
[ 0  1  1]]

所需的输出(每个元素为dtype str,以确保不省略前导零)

代码语言:javascript
运行
复制
[ 010 , 000 , 111 , 011 ]

如何操作2d数组以获得此输出?是否可以在numpyregex包中使用它们的功能?为了执行这个数组转换,可以避免使用for循环吗?

EN

回答 2

Stack Overflow用户

发布于 2022-06-29 08:54:05

这个问题很不清楚,假设整数进出,您可以使用:

代码语言:javascript
运行
复制
a = np.array([[0, 1, 0],
              [0, 0, 0],
              [1, 1, 1],
              [0, 1, 1]])

out = (a[:,::-1]*(10**np.arange(a.shape[1]))).sum(1)

但是你不会有前导零…

产出:

代码语言:javascript
运行
复制
array([ 10,   0, 111,  11])

假设您真的想要从二进制转换,那么您可能应该使用np.packbits

代码语言:javascript
运行
复制
out = np.packbits(np.pad(a, ((0,0), (8-a.shape[1],0))), axis=1, bitorder='big')

产出:

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

或作为平版:

代码语言:javascript
运行
复制
out = (np.packbits(np.pad(a, ((0,0), (8-a.shape[1],0))), axis=1, bitorder='big')
         .ravel()
       )
# array([2, 0, 7, 3], dtype=uint8)
票数 1
EN

Stack Overflow用户

发布于 2022-06-29 08:55:40

使用字符串:

代码语言:javascript
运行
复制
import numpy as np

arr = np.array([[0,  1,  0], [ 0,  0,  0], [ 1,  1,  1], [ 0,  1,  1]])

binaries = []
for idx, row in enumerate(arr):
    strings = [str(integer) for integer in row]
    a_string = "".join(strings)
    binaries.append(a_string)

>>> binaries
>>> ['010', '000', '111', '011']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72798333

复制
相关文章

相似问题

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