如何将numpy布尔数组中的True和False分别转换为1和-1
Numpy布尔数组转换为1/-1的实现方案
核心实现逻辑
你当前得到的布尔数组中,True在numpy数值运算中会自动映射为1,False映射为0,基于这个特性可以快速完成转换,有三种常用实现方式:
- 方法1:算术运算转换(性能最优)
直接在原有表达式后做数值计算,一行完成转换:
原理:布尔值乘2后得到2/0,再减1就得到1/-1,完全符合需求。strat1 = (np.random.rand(2 ** M, N) > 0.5) * 2 - 1 - 方法2:
np.where实现(可读性最高)
显式指定条件匹配和不匹配时的返回值,代码逻辑更易懂:strat1 = np.where(np.random.rand(2 ** M, N) > 0.5, 1, -1) - 方法3:直接生成目标数组(代码最简洁)
不需要先生成随机数再做判断,直接调用np.random.choice一步生成符合要求的数组:strat1 = np.random.choice([1, -1], size=(2**M, N))
修改后的完整代码示例
你可以根据自己的需求选择任意一种方法替换原代码中strat1的生成逻辑即可:
import numpy as np for ca in np.shape(An): N = An[(ca - 1)] for M in range(Mi, Mm): crep = rep winr = np.random.rand(M, 1) # 下方三个实现任选其一即可 strat1 = (np.random.rand(2 ** M, N) > 0.5) * 2 - 1 # strat1 = np.where(np.random.rand(2 ** M, N) > 0.5, 1, -1) # strat1 = np.random.choice([1, -1], size=(2 ** M, N))
内容的提问来源于stack exchange,提问作者JakeB18900
相关产品推荐
相关产品推荐

