我有一个由1s和0组成的2d numpy数组。我想把每一行的1和0加起来。
arr =
[[0 1 0]
[ 0 0 0]
[ 1 1 1]
[ 0 1 1]]
所需的输出(每个元素为dtype str,以确保不省略前导零)
[ 010 , 000 , 111 , 011 ]
如何操作2d数组以获得此输出?是否可以在numpy
或regex
包中使用它们的功能?为了执行这个数组转换,可以避免使用for循环吗?
发布于 2022-06-29 00:54:05
这个问题很不清楚,假设整数进出,您可以使用:
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)
但是你不会有前导零…
产出:
array([ 10, 0, 111, 11])
假设您真的想要从二进制转换,那么您可能应该使用np.packbits
out = np.packbits(np.pad(a, ((0,0), (8-a.shape[1],0))), axis=1, bitorder='big')
产出:
array([[2],
[0],
[7],
[3]], dtype=uint8)
或作为平版:
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)
发布于 2022-06-29 00:55:40
使用字符串:
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']
https://stackoverflow.com/questions/72798333
复制相似问题