📜  numpy 数组除以每一行的总和 - Python (1)

📅  最后修改于: 2023-12-03 15:03:19.135000             🧑  作者: Mango

Numpy数组除以每一行的总和 - Python

在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.newaxisrow_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提供了多种方法,可以方便地将数组除以每一行或每一列的总和。这些方法的选择取决于你的具体应用场景以及算法的复杂度。