如何规范化python中的二维numpy数组更简洁?

给出3次3 numpy阵列

a = numpy.arange(0,27,3).reshape(3,3)

# array([[ 0,  3,  6],
#        [ 9, 12, 15],
#        [18, 21, 24]])

为了规范化我想到的二维数组的行

row_sums = a.sum(axis=1) # array([ 9, 36, 63])
new_matrix = numpy.zeros((3,3))
for i, (row, row_sum) in enumerate(zip(a, row_sums)):
    new_matrix[i,:] = row / row_sum

必须有更好的方法,不是吗?

也许要澄清:通过归一化我的意思是,每行的总和必须是1.但我认为大多数人都会清楚这一点.

解决方法:

广播真的很有用:

row_sums = a.sum(axis=1)
new_matrix = a / row_sums[:, numpy.newaxis]

row_sums [:,numpy.newaxis]将row_sums从(3,)重塑为正(3,1).当你做a / b时,a和b互相广播.

您可以了解有关广播here甚至更好的here的更多信息.

上一篇:javascript – 具有相同名称的函数和变量


下一篇:c – typedef如何用于函数指针