基于变化索引利用NumPy生成交替值的二进制数组
基于变化索引利用NumPy生成交替值的二进制数组
当然有NumPy的“魔法操作”能搞定这个需求!我给你一步步拆解怎么实现:
首先,咱们先抓准需求核心:从初始值0开始,在给定的索引数组a上交替切换0和1,最终生成对应的二进制数组。
直接上实操代码,拿你给的例子a = np.array([2,5,9,10])来演示:
import numpy as np a = np.array([2, 5, 9, 10]) # 确定目标数组的长度:最后一个索引 + 1(因为数组索引从0开始) b_length = a[-1] + 1 # 创建初始全0数组 b = np.zeros(b_length, dtype=int) # 在需要切换值的索引位置打上标记 b[a] = 1 # 累积求和后取模2,自动生成交替的0和1 b = b.cumsum() % 2 print(b) # 输出结果刚好是你要的:[0 0 1 1 1 0 0 0 0 1 0]
原理其实特别直观:
- 先在所有需要切换值的索引位置设为1,相当于给“切换点”打标记
- 对标记数组做累积求和,每遇到一个标记,累积值就加1,这样就能记录当前是第几次切换
- 最后对2取模,就把累积值转换成了0和1交替的结果,完美匹配预期效果
哪怕遇到特殊情况,比如a是空数组(那结果就是全0数组),或者从索引0就开始切换,这个方法也能稳稳兼容,完全不用额外调整逻辑。
备注:内容来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

