1.数组的形状
数组的形状取决于其每个轴上的元素个数。
>>> a=np.int32(100*np.random.random((3,4))) #生成3×4整数数组 >>> a array([[26, 11, 0, 41], [48, 9, 93, 38], [73, 55, 8, 81]]) >>> a.shape
2.更改数组的形状
可以用多种方式更改数组的形状:
>>> a.ravel() # 展开数组 array([26, 11, 0, 41, 48, 9, 93, 38, 73, 55, 8, 81]) >>> a.shape= (6, 2) #数组形状为(6, 2) >>> a.transpose() #转置数组,原数组a不变 array([[26, 0, 48, 93, 73, 8], [11, 41, 9, 38, 55, 81]])
由ravel()展开的数组元素的顺序通常遵循C风格,即以行为基准,最右边的索引变化得最快,所以元素a[0,0]之后是a[0,1]。数组改变成其他形状,数组元素的顺序仍然遵循C风格。NumPy通常会创建一个以这个顺序保存数据的数组,所以ravel()通常不需要创建调用数组的副本。但如果调用数组通过切片其他数组获取或有不同寻常的选项,可能就需要创建其副本。还可以通过一些可选参数让ravel()和reshape()构建Fortran风格的数组,即最左边的索引变化得最快。
reshape()函数改变调用数组的形状并返回该数组的复制副本,而resize()函数改变调用数组自身(in-place)。
>>> a array([[26, 11], [ 0, 41], [48, 9], [93, 38], [73, 55], [ 8, 81]]) >>> a.resize((2,6)) >>> a array([[26, 11, 0, 41, 48, 9], [93, 38, 73, 55, 8, 81]]) >>> a=np.array([[0,1],[2,3]]) >>> a.resize(2,3) >>> a array([[0, 1, 2], [3, 0, 0]]) #当需要填充时用array.resize()填充零 >>> a = np.arange(6) >>> b=a.reshape((3,2)) #array.reshape()得到一个新的array,原array不变 >>> a array([0, 1, 2, 3, 4, 5]) >>> b array([[0, 1], [2, 3], [4, 5]]) >>> a = np.array([[1,2,3], [4,5,6]]) >>> np.reshape(a, (3,-1)) #-1没指定维度值,实际计算得到2 array([[1, 2], [3, 4], [5, 6]])
如果在形状操作中指定一个维度为-1,那么其准确维度将根据实际情况计算得到。