通常,数组会被np.squeeze()
挤压。在文档中,它说
从。
的形状中删除一维条目
但是我仍然想知道:为什么是零和非维度条目的形状?或者换句话说:为什么a.shape = (2,1)
和 (2,)
都存在?
答案 0 :(得分:20)
除了两者之间的数学差异外,还存在可预测性问题。如果遵循了您的建议,您就无法依赖阵列的维度。因此,my_array[x,y]
形式的任何表达式都需要首先检查my_array
是否实际上是二维的,并且在某些时候没有隐式squeeze
。这可能会比偶然的squeeze
更加模糊代码,而Explicit is better than implicit
会做一个明确指定的事情。
实际上,甚至可能很难说,哪个轴已被删除,导致一系列新问题。
本着The Zen of Python的精神,也squeeze
,我们也可以说我们应该更明确MySQL running - 5.5.24
DB size: 3 tables with 200 M each
DB is running on AWS ec2 with 16GB RAM on server.
8GB been allocated to MySQL.
来进行隐式数组转换。
答案 1 :(得分:5)
重要性的一个例子是乘法数组。两个二维数组将一次乘以每个值
e.g。
{ >= | > | < | <= | != }
如果将1d数组乘以2d数组,则行为不同
>>> x = np.ones((2, 1))*2
>>> y = np.ones((2, 1))*3
>>> x.shape
(2,1)
>>> x*y
array([[ 6.],
[ 6.]])
其次,您也可能想要挤压较早的尺寸,例如a.shape =(1,2,2)到a.shape =(2,2)
答案 2 :(得分:2)
挤压(2,1)数组时,得到的(2,)既可以用作(2,1),也可以用作(1,2):
>>> 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.]
使用(2,1)数组不会发生这种情况:
>>> 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)
答案 3 :(得分:1)
如果像使用这样的无用一维数组,这可以帮助您骑行 [7,8,9]代替了[[[7,8,9]] 或[[1,2,3],[4,5,6]]代替[[[[1,2,3],[4,5,6]]]] 例如,从教程上检查此链接 https://www.tutorialspoint.com/numpy/numpy_squeeze.htm