如何将Numpy数组两列求和并添加为第三列?解决形状匹配问题
解决Numpy数组添加求和列的问题
嘿,我来帮你搞定这个Numpy数组的问题!
你遇到的核心问题是索引用错了:X[3]是在访问数组的第三行(Numpy索引从0开始),而X[0]+X[1]是把第一行和第二行的对应元素相加,得到的是长度为2的数组——这只会修改第三行的内容,完全不是你想要的添加第三列的操作。
下面给你两种正确的解决方案:
方案一:给已有的2列数组添加第三列
如果已经创建了(100000000, 2)的数组,按以下步骤操作:
计算每行前两列的和:
用列索引取所有行的前两列,再逐行相加:row_sums = X[:, 0] + X[:, 1]这里
[:, 0]表示取所有行的第一列,[:, 1]取所有行的第二列,相加后得到一个一维数组,每个元素对应每行的和。转换为二维列向量:
因为原数组是二维的,拼接需要相同维度,所以把一维数组转成(100000000, 1)的列向量:row_sums = row_sums.reshape(-1, 1)-1是让Numpy自动计算行数,这里会匹配原数组的100000000行。拼接数组:
用np.hstack或np.column_stack按列拼接原数组和新列:X_with_sum = np.hstack([X, row_sums]) # 或者用 np.column_stack([X, row_sums]),效果一致最终
X_with_sum就是形状为(100000000, 3)的数组,每行第三列是前两列的和。
方案二:直接初始化3列数组(更高效)
如果还没创建数组,直接初始化3列的数组可以避免额外的拼接操作,节省内存和时间:
import numpy as np # 直接创建3列的数组(填充随机整数) X = np.random.randint(100000000, size=(100000000, 3)) # 给前两列赋值随机整数 X[:, :2] = np.random.randint(100000000, size=(100000000, 2)) # 计算第三列的和 X[:, 2] = X[:, 0] + X[:, 1]
额外提醒
注意np.random.random_integers已经被Numpy弃用了,建议使用np.random.randint来生成整数随机数组,它的用法更清晰,也兼容最新版本的Numpy。
你可以打印前几行验证结果:
print(X_with_sum[:5]) # 输出示例: # [[12345678 87654321 99999999] # [54321098 45678901 99999999] # [11111111 22222222 33333333] # ...]
内容的提问来源于stack exchange,提问作者Salman Arshad
相关产品推荐
相关产品推荐

