Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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 为什么我们需要np.squent()?_Python_Numpy - Fatal编程技术网

Python 为什么我们需要np.squent()?

Python 为什么我们需要np.squent()?,python,numpy,Python,Numpy,通常,数组是通过np.squence()压缩的。在文档中,它说 从a的形状中删除一维条目 然而,我仍然在想:为什么零和无量纲的条目是a的形状?或者换一种说法:为什么a.shape=(2,1)和(2,)都存在?一个重要的例子是当数组相乘时。两个二维数组将一次乘以每个值 e、 g 如果将一维数组乘以二维数组,则行为不同 >>> z = np.ones((2,))*3 >>> x*z array([[ 6., 6.], [ 6., 6.]]) 其

通常,数组是通过
np.squence()
压缩的。在文档中,它说

从a的形状中删除一维条目


然而,我仍然在想:为什么零和无量纲的条目是a的形状?或者换一种说法:为什么
a.shape=(2,1)
(2,)
都存在?

一个重要的例子是当数组相乘时。两个二维数组将一次乘以每个值

e、 g

如果将一维数组乘以二维数组,则行为不同

>>> z = np.ones((2,))*3
>>> x*z
array([[ 6.,  6.],
       [ 6.,  6.]])

其次,您可能还希望压缩早期维度,例如a.shape=(1,2,2)到a.shape=(2,2)

除了这两个事物之间的数学差异之外,还有可预测性问题。如果您的建议被采纳,那么您在任何时候都不能依赖数组的维度。因此,任何形式为
my_array[x,y]
的表达式都需要替换为首先检查
my_array
是否实际上是二维的,并且在某个点上没有隐式的
挤压。这可能会使代码变得更加模糊,而不是偶尔的
挤压
,它会做一件明确指定的事情

事实上,甚至可能很难判断哪个轴被移除了,从而导致了一系列新问题


本着“显式优于隐式”的精神,我们也可以说,相对于隐式数组转换,我们更喜欢显式
压缩

这有助于您摆脱无用的一维数组,如使用
[7,8,9]
而不是
[[7,8,9]]]
[[1,2,3],[4,5,6]]
而不是
[[1,2,3],[4,5,6]]
。 例如,从教程点检查此项。

挤压(2,1)数组时,会得到(2,),它同时作为(2,1)和(1,2)工作:

对于(2,1)数组,这是不可能发生的:


固定到一个更传统的风格
>>> z = np.ones((2,))*3
>>> x*z
array([[ 6.,  6.],
       [ 6.,  6.]])
>>> a = np.ones(2)
>>> a.shape
(2,)
>>> a.T.shape
(2,)
>>> X = np.ones((2,2))*2
>>> np.dot(a,X)
[4. 4.]
>>> np.dot(X,a)
[4. 4.]
>>> b = np.ones((2,1))
>>> np.dot(b,X)
Traceback (most recent call last):
ValueError: shapes (2,1) and (2,2) not aligned: 1 (dim 1) != 2 (dim 0)