📅  最后修改于: 2023-12-03 15:03:19.135000             🧑  作者: Mango
在numpy中,我们可以使用sum
函数计算数组中每一行或每一列的总和。因此,通过将每一行的总和除以该行中的每个元素,即可得到每个元素占该行总和的比例。
以下是一个示例,说明如何将numpy数组除以每一行的总和:
import numpy as np
# 创建随机矩阵
arr = np.random.randint(1, 10, size=(3, 4))
# 计算每行总和
row_sum = arr.sum(axis=1)
# 每个元素除以所在行的总和
new_arr = arr / row_sum[:, np.newaxis]
print("原始数组:\n", arr)
print("每行总和:\n", row_sum)
print("每个元素除以所在行的总和:\n", new_arr)
输出结果为:
原始数组:
[[8 5 9 5]
[5 5 8 8]
[2 2 2 9]]
每行总和:
[27 26 15]
每个元素除以所在行的总和:
[[0.2962963 0.18518519 0.33333333 0.18518519]
[0.19230769 0.19230769 0.30769231 0.30769231]
[0.13333333 0.13333333 0.13333333 0.6 ]]
可以看到,每个元素都被除以了所在行的总和。
需要注意的是,在除法运算中,每个元素都必须转换为浮点型,否则会得到整数除法的结果。因此,使用np.newaxis
将row_sum
的形状从(3,)
变为(3, 1)
,以便进行广播运算。
此外,我们还可以使用numpy
中的einsum
函数,将直接计算每一行的总和,并将每个元素除以该行的总和。如下所示:
import numpy as np
arr = np.random.randint(1, 10, size=(3, 4))
new_arr = np.einsum('ij,i->ij', arr, 1/arr.sum(axis=1))
print("原始数组:\n", arr)
print("每个元素除以所在行的总和:\n", new_arr)
输出结果与上例相同。
总之,numpy提供了多种方法,可以方便地将数组除以每一行或每一列的总和。这些方法的选择取决于你的具体应用场景以及算法的复杂度。