Python 从行中减去行的最小值
我知道 a-a.min(轴=0) 将从列中的每个元素中减去每列的最小值。我想从行中的每个元素中减去每行中的最小值。我知道 a、 最小值(轴=1) 指定行内的最小值,但如何让减法按行而不是按列进行?(如何指定减法的轴?)Python 从行中减去行的最小值,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,我知道 a-a.min(轴=0) 将从列中的每个元素中减去每列的最小值。我想从行中的每个元素中减去每行中的最小值。我知道 a、 最小值(轴=1) 指定行内的最小值,但如何让减法按行而不是按列进行?(如何指定减法的轴?) 编辑:对于我的问题,a是NumPy中的2d数组。假设a是NumPy数组,您可以使用: new_a = a - np.min(a, axis=1)[:,None] 试试看: import numpy as np a = np.arange(24).reshape((4,6))
编辑:对于我的问题,a是NumPy中的2d数组。假设
a
是NumPy数组,您可以使用:
new_a = a - np.min(a, axis=1)[:,None]
试试看:
import numpy as np
a = np.arange(24).reshape((4,6))
print (a)
new_a = a - np.min(a, axis=1)[:,None]
print (new_a)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]]
结果:
import numpy as np
a = np.arange(24).reshape((4,6))
print (a)
new_a = a - np.min(a, axis=1)[:,None]
print (new_a)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]]
请注意,np.min(a,axis=1)
返回行最小值的1d数组
我们可以使用[:,None]
为其添加一个额外维度。然后它看起来像这个二维阵列:
array([[ 0],
[ 6],
[12],
[18]])
当此2d数组参与减法运算时,它将被广播成(4,6)
的形状,如下所示:
array([[ 0, 0, 0, 0, 0, 0],
[ 6, 6, 6, 6, 6, 6],
[12, 12, 12, 12, 12, 12],
[18, 18, 18, 18, 18, 18]])
现在,在两个
(4,6)
数组之间进行元素相减。如果只想使用pandas
,只需使用min(row)
指定
keepdims=True
以保留一个长度为1的维度,以代替min
折叠的维度,从而使广播工作正常:
a - a.min(axis=1, keepdims=True)
这在运行时确定轴时特别方便,但可能比手动重新引入压缩维度更清晰,即使
1
值是固定的。ValueError:min()的实现中不支持'keepdims'参数我明白了ValueError@AlessandroSolbiati:如果您有一个Pandas数据帧,那么是的,您会得到这样的错误,但是这种操作在Pandas数据帧上没有多大意义。我的答案是为NumPy数组编写的。提问者真的应该指定hecka
是什么。什么类型的对象是a
?2d numpy数组。