n维numpy布尔数组如何用随机索引列表无循环定位目标元素
Numpy n维布尔数组随机元素翻转最优方案
- 核心解决方法:将你生成的各维度索引列表转为
tuple即可直接索引。numpy 要求多维度位置索引需以 tuple 形式传入,列表会被识别为沿首维度的批量索引,这也是你之前array[indices]不符合预期的原因。
代码示例:# 原有索引生成逻辑不变 indices = [np.random.randint(n) for n in array.shape] # 转tuple后直接操作,~ 为布尔值翻转操作符 array[tuple(indices)] = ~array[tuple(indices)] - 更简洁的无冗余写法:可以直接通过
np.unravel_index一步生成符合要求的tuple类型索引,不需要手动遍历数组维度生成索引列表:# 生成随机位置的tuple索引 rand_pos = np.unravel_index(np.random.randint(array.size), array.shape) # 直接翻转对应元素 array[rand_pos] = ~array[rand_pos] - 补充说明:如果要使用解包语法,也可以写成
array[(*indices,)],但可读性不如直接转tuple,不推荐。
内容的提问来源于stack exchange,提问作者waterlemon
相关产品推荐
相关产品推荐

