如何高效复制Numpy二维数组的指定列至另一个数组并将修改后的值写回原数组
高效操作NumPy数组:快速复制列与更新原数组
嘿,我懂你为啥头疼那个慢得离谱的循环了——Python层面的逐行遍历对NumPy数组来说真的是大材小用,完全浪费了NumPy底层向量化优化的优势。咱们用两行代码就能解决这两个问题,既快又简洁!
1. 把indi的第4列快速复制到rebalance
别再用for循环逐行赋值了,NumPy的切片操作直接就能搞定整个列的复制,而且是底层C实现的,速度快到飞起:
# 提取indi的第4列(索引3),转成float后赋值给rebalance的第一列 rebalance[:, 0] = indi[:, 3].astype(float)
这行代码一次性处理所有行,不管你的数组有多少行,效率都比循环高N倍。运行后rebalance就会和你预期的输出完全一致,类型也是<class 'numpy.ndarray'>。
2. 将修改后的rebalance写回indi的对应位置
因为你的indi数组是object类型(混合了整数和字符串),所以只需要把rebalance里的数值转成字符串,再直接赋值给indi的第4列就行:
# 把rebalance的第一列转成字符串,替换indi的第4列(索引3) indi[:, 3] = rebalance[:, 0].astype(str)
执行完这行代码,indi数组就会变成你想要的样子,所有第4列的元素都会被更新为rebalance里的对应值,保持字符串类型的格式。
小提醒
如果你的indi数组后续不需要混合类型,可以考虑把第4列单独转成数值类型(比如float),这样后续操作会更高效,但根据你给出的示例,转成字符串是符合需求的。
内容的提问来源于stack exchange,提问作者Stacey
相关产品推荐
相关产品推荐

