2024-04-19 17:40:17 发布
网友
如何将numpy数组行除以该行中所有值的和?
这是一个例子。但我很确定有一种更为奇特和高效的方法:
import numpy as np e = np.array([[0., 1.],[2., 4.],[1., 5.]]) for row in xrange(e.shape[0]): e[row] /= np.sum(e[row])
结果:
array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])
方法1:使用None(或np.newaxis)添加额外维度,以便广播行为:
None
np.newaxis
>>> e array([[ 0., 1.], [ 2., 4.], [ 1., 5.]]) >>> e/e.sum(axis=1)[:,None] array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])
方法二:快乐转置:
>>> (e.T/e.sum(axis=1)).T array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])
(如果需要的话,可以删除axis=部分以获得简洁性。)
axis=
方法3:(从Jaime的评论中提升)
使用sum上的keepdims参数保留维度:
sum
keepdims
>>> e/e.sum(axis=1, keepdims=True) array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])
你可以用数学的方法来做。
这里,E是原始矩阵,D是对角矩阵,其中每个条目是E中相应行的和。如果你很幸运有一个可逆的D,这是一个非常方便的数学方法。
E
D
在纽比:
import numpy as np diagonal_entries = [sum(e[row]) for row in range(e.shape[0])] D = np.diag(diagonal_entries) D_inv = np.linalg.inv(D) e = np.dot(e, D_inv)
方法1:使用
None
(或np.newaxis
)添加额外维度,以便广播行为:方法二:快乐转置:
(如果需要的话,可以删除
axis=
部分以获得简洁性。)方法3:(从Jaime的评论中提升)
使用
sum
上的keepdims
参数保留维度:你可以用数学的方法来做。
这里,
E
是原始矩阵,D
是对角矩阵,其中每个条目是E
中相应行的和。如果你很幸运有一个可逆的D
,这是一个非常方便的数学方法。在纽比:
相关问题 更多 >
编程相关推荐