Python Numpy的意思是现在需要重塑?
我想用列的平均值减去numpy数组中的所有值 以前,以下代码起作用:Python Numpy的意思是现在需要重塑?,python,numpy,Python,Numpy,我想用列的平均值减去numpy数组中的所有值 以前,以下代码起作用: centered_data = data - data.mean(axis = 1) 现在,此代码生成如下错误消息: ValueError:操作数无法与形状3862 3一起广播 将此行更改为: centered_data = data - data.mean(axis = 1).reshape(data.shape[0],1) 数据的类型为numpy.ndarray 为什么平均向量现在需要重塑,而以前没有呢?请看下面的例子
centered_data = data - data.mean(axis = 1)
现在,此代码生成如下错误消息:
ValueError:操作数无法与形状3862 3一起广播
将此行更改为:
centered_data = data - data.mean(axis = 1).reshape(data.shape[0],1)
数据的类型为numpy.ndarray
为什么平均向量现在需要重塑,而以前没有呢?请看下面的例子
根据第一条广播规则:
在两个阵列上操作时,NumPy会比较它们的形状
元素方面。它从后面的尺寸标注开始,然后开始工作
前进的道路。当需要时,两个维度是兼容的
它们相等,或者其中一个为1
因此,将3与862进行比较是失败的。因此,您需要将数据重塑为862,3或平均值为3,1。请查看
根据第一条广播规则:
在两个阵列上操作时,NumPy会比较它们的形状
元素方面。它从后面的尺寸标注开始,然后开始工作
前进的道路。当需要时,两个维度是兼容的
它们相等,或者其中一个为1
因此,将3与862进行比较是失败的。因此,您需要将数据重塑为862,3或平均值为3,1。您还可以将轴添加到阵列中,以便它将广播
>>> a
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23]])
>>> m = a.mean(-1)
>>> a.shape, m.shape
((3, 8), (3,))
>>> a - m[:, np.newaxis]
array([[-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5],
[-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5],
[-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5]])
>>>
>>> m[:, np.newaxis].shape
(3, 1)
>>>
您还可以将轴添加到阵列中,以便阵列将进行广播
>>> a
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23]])
>>> m = a.mean(-1)
>>> a.shape, m.shape
((3, 8), (3,))
>>> a - m[:, np.newaxis]
array([[-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5],
[-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5],
[-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5]])
>>>
>>> m[:, np.newaxis].shape
(3, 1)
>>>
问:为什么平均向量现在需要整形
答:因为NumPy无法在n,和n之间执行操作,。要广播,NumPy将查找轴兼容性,1与任何轴兼容
(3,862) -
(3,) # error
(3,1) # this works
(1,1) # this works
(,862) # error
(1,862) # works
问:为什么平均向量现在需要整形
答:因为NumPy无法在n,和n之间执行操作,。要广播,NumPy将查找轴兼容性,1与任何轴兼容
(3,862) -
(3,) # error
(3,1) # this works
(1,1) # this works
(,862) # error
(1,862) # works
np.mean有一个keepdims参数。data.mean也有,但在np.mean中有记录:
如果没有这一点,像mean和sum这样的操作将删除一个维度。重塑-1,1和[:,无]也可以将尺寸标注添加回
如果在另一个轴上取平均值,则无需保留或恢复尺寸。这是因为如果需要,广播规则会在开始时自动添加维度:
In [645]: data-data.mean(axis=0)
Out[645]:
array([[-4., -4., -4., -4.],
[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.]])
您的“之前”案例是这样的吗?轴上的减少=0
我不知道numpy中有任何变化会使axis=1的情况下不需要某种形状的重塑或keepaxis
如果data.shape==3,4
工作
这会引发一个值错误:
data+np.array([1,1,1])
ValueError: operands could not be broadcast together with shapes (3,4) (3)
这项工作:
data+np.array([1,1,1])[:,None]
np.mean有一个keepdims参数。data.mean也有,但在np.mean中有记录:
如果没有这一点,像mean和sum这样的操作将删除一个维度。重塑-1,1和[:,无]也可以将尺寸标注添加回
如果在另一个轴上取平均值,则无需保留或恢复尺寸。这是因为如果需要,广播规则会在开始时自动添加维度:
In [645]: data-data.mean(axis=0)
Out[645]:
array([[-4., -4., -4., -4.],
[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.]])
您的“之前”案例是这样的吗?轴上的减少=0
我不知道numpy中有任何变化会使axis=1的情况下不需要某种形状的重塑或keepaxis
如果data.shape==3,4
工作
这会引发一个值错误:
data+np.array([1,1,1])
ValueError: operands could not be broadcast together with shapes (3,4) (3)
这项工作:
data+np.array([1,1,1])[:,None]
我喜欢这个解释来补充文档:我喜欢这个解释来补充文档: