Python中二进制数组转整数及二进制矩阵转索引矩阵的实现方法咨询
嘿,这两个Python里的数组/矩阵转换问题我经常碰到,给你整理了几种实用的解决方法,看看哪种适合你的场景:
1. 如何在Python中将二进制数组转换为整数?
这里有两种常用的方式,分别适配不同需求:
字符串拼接法(简单直观)
把二进制数组里的每个元素转成字符串,拼接成完整的二进制字符串后,用int()函数指定进制为2来转换:binary_array = [1, 0, 1, 1] decimal_number = int(''.join(map(str, binary_array)), 2) print(decimal_number) # 输出:11这种方法代码简洁,容易理解,适合中小规模的数组。
位运算法(高效性能)
如果处理的二进制数组很大,位运算的方式会更高效,不需要额外的字符串操作:binary_array = [1, 0, 1, 1] decimal_number = 0 for bit in binary_array: decimal_number = (decimal_number << 1) | bit print(decimal_number) # 输出:11原理是每次把当前结果左移一位(相当于乘以2),再和当前的二进制位做或运算,逐步构建出最终的整数。
2. 二进制矩阵转索引矩阵的实现
针对你给出的矩阵a,每行只有一个1,要得到每行1的索引组成的列矩阵b,同样有两种实现方式:
纯Python列表操作(无需额外库)
直接遍历矩阵的每一行,用index(1)找到该行中1的位置,再把结果包装成列矩阵的格式:a = [[1, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]] b = [[row.index(1)] for row in a] print(b) # 输出:[[0], [2], [1], [3], [4]]这种方法不需要安装任何第三方库,代码简洁直接,适合小规模矩阵。
Numpy实现(高效处理大规模矩阵)
如果你的矩阵很大,用Numpy的向量操作会快很多,利用argmax()函数找到每行最大值(也就是1)的索引,再通过reshape()转成列矩阵:import numpy as np a = np.array([[1, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]) b = np.argmax(a, axis=1).reshape(-1, 1) print(b) # 输出: # [[0] # [2] # [1] # [3] # [4]]axis=1表示按行查找最大值的索引,reshape(-1,1)会自动把一维数组转换成列数为1的二维矩阵。
内容的提问来源于stack exchange,提问作者user3043636
相关产品推荐
相关产品推荐

