Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python Numpy中,如何对2D数组和1D数组进行减法和除法?_Python_Arrays_Numpy - Fatal编程技术网

在Python Numpy中,如何对2D数组和1D数组进行减法和除法?

在Python Numpy中,如何对2D数组和1D数组进行减法和除法?,python,arrays,numpy,Python,Arrays,Numpy,例如,我定义了一个2D numpy数组。我想根据以下语句将其转换为另一个二维数组: B = A - mean(A), the mean by the second axis C = B / mean(A) 例如: >>> import numpy as np >>> A = np.array([[1, 2, 3], [4, 6, 8]]) >>> A array([[1, 2, 3], [4, 6, 8]]) >>

例如,我定义了一个2D numpy数组。我想根据以下语句将其转换为另一个二维数组:

B = A - mean(A), the mean by the second axis
C = B / mean(A)
例如:

>>> import numpy as np
>>> A = np.array([[1, 2, 3], [4, 6, 8]])
>>> A
array([[1, 2, 3],
       [4, 6, 8]])
>>> M = np.mean(A, axis=1)
>>> M
array([ 2.,  6.])
>>> B = ... # ???
>>> B
array([[-1., 0., 1.],
       [-2., 0., 2.]])
>>> C = ... # ???
>>> C
array([[-0.5, 0., 0.5],
       [-0.33333333, 0., 0.33333333]])

令人烦恼的是,
numpy.mean(axis=…)
提供了一个数组,其中相关轴已被删除,而不是设置为大小1。因此,当您将其应用于axis=1的2x3数组时,将得到一个大小为2的(秩1)数组,而不是您真正想要的2x1数组

您可以通过向
numpy.mean
提供
keepdims
参数来解决此问题:

M = np.mean(A, axis=1, keepdims=True)

如果不存在,另一种方法是使用
重塑

恼人的是,
numpy.mean(axis=…)
提供一个数组,其中相关轴已被删除,而不是设置为大小1。因此,当您将其应用于axis=1的2x3数组时,将得到一个大小为2的(秩1)数组,而不是您真正想要的2x1数组

您可以通过向
numpy.mean
提供
keepdims
参数来解决此问题:

M = np.mean(A, axis=1, keepdims=True)

如果不存在这种情况,另一种选择是使用
重塑

您可以使用
减法
除法
from
numpy
。解决您的示例:

import numpy as np
A = np.array([[1, 2, 3], [4, 6, 8]])
M = np.mean(A, axis=1)
B = np.subtract(A.T,M).T
C = np.divide(B.T,M).T
print(B)
print(C)
,结果:

[[-1.  0.  1.]
 [-2.  0.  2.]]
[[-0.5         0.          0.5       ]
 [-0.33333333  0.          0.33333333]]

您可以使用
numpy
中的
减法
除法
。解决您的示例:

import numpy as np
A = np.array([[1, 2, 3], [4, 6, 8]])
M = np.mean(A, axis=1)
B = np.subtract(A.T,M).T
C = np.divide(B.T,M).T
print(B)
print(C)
,结果:

[[-1.  0.  1.]
 [-2.  0.  2.]]
[[-0.5         0.          0.5       ]
 [-0.33333333  0.          0.33333333]]

Gareht McCaughan的解决方案更加优雅,但是如果
keepdims
不存在,您可以向
M
添加一个新轴:

B = A - M[:, None]

(M[:,无]。形状是(2,1),因此广播发生了)

Gareht McCaughan的解决方案更为优雅,但如果
keepdims
不存在,您可以向
M
添加一个新轴:

B = A - M[:, None]
(M[:,无]。形状是(2,1),所以会发生广播)