You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅实现布尔数组→整数数组→位移运算→求和的代码优化方案

这里有个更简洁优雅的实现方案,充分利用numpy的向量化操作替代嵌套循环,同时保持逻辑清晰,扩展性也更好(哪怕后续cond追加到7个元素也无需修改核心逻辑):

import numpy as np
import pandas as pd

# 直接初始化条件数组为numpy数组,一步到位
cond = np.array([
    [True, False, True, False, False, True],
    [False, True, False, True, True, False]
], dtype=np.int8)  # 指定int8类型节省内存

# 生成对应每一行的位移量,转成列向量实现广播
shifts = np.arange(cond.shape[0])[:, np.newaxis]

# 向量化执行位移操作,替代嵌套循环
shifted_cond = cond << shifts

# 转置后转成DataFrame,同时添加sum列
df = pd.DataFrame(shifted_cond.T).assign(sum=lambda x: x.sum(axis=1))

为什么这个方案更优?

  • 精简初始化流程:直接用np.array定义数据,省去了先append列表再转numpy的冗余步骤;
  • 替代嵌套循环:借助numpy的广播机制,让每一行的所有元素自动对应左移该行的索引值,代码更简洁的同时,运算效率远高于Python原生循环(数据量越大优势越明显);
  • 扩展性拉满:哪怕后续cond追加到7个元素,只需要在初始化数组时添加新行即可,核心的位移、求和逻辑完全不用改动;
  • 内存更高效:指定dtype=np.int8,用最小的整数类型存储数据,避免不必要的内存消耗。

运行后得到的结果和你期望的完全一致:

0  1  sum
0  1  0    1
1  0  2    2
2  2  1    0
3  0  2    2
4  0  2    2
5  1  0    1

内容的提问来源于stack exchange,提问作者Donghee Seo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 03:07:52