NumPy数组的形状操作

2024年3月21日16:21:00NumPy数组的形状操作已关闭评论

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,那么其准确维度将根据实际情况计算得到。

  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。