Numpy中reshape函数、reshape(1,-1)的含义(浅显易懂,源码实例)

本文详细介绍numpy中reshape函数的三种常见相关用法。

一般用法:numpy.arange(n).reshape(a, b); 依次生成n个自然数,并且以a行b列的数组形式显示:

In [1]: 
np.arange(16).reshape(2,8) #生成16个自然数,以2行8列的形式显示
Out[1]: 
array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13, 14, 15]])

特殊用法:mat (or array).reshape(c, -1);  必须是矩阵格式或者数组格式,才能使用 .reshape(c, -1) 函数, 表示将此矩阵或者数组重组,以 c行d列的形式表示-1的作用就在此,自动计算d:d=数组或者矩阵里面所有的元素个数/c, d必须是整数,不然报错):

In [2]: arr=np.arange(16).reshape(2,8)
out[2]:
 
In [3]: arr
out[3]:
array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13, 14, 15]])

In [4]: arr.reshape(4,-1) #将arr变成4行的格式,列数自动计算的(c=4, d=16/4=4)
out[4]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [5]: arr.reshape(8,-1) #将arr变成8行的格式,列数自动计算的(c=8, d=16/8=2)
out[5]:
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15]])

In [6]: arr.reshape(10,-1) #将arr变成10行的格式,列数自动计算的(c=10, d=16/10=1.6 != Int)
out[6]:
ValueError: cannot reshape array of size 16 into shape (10,newaxis)

其他用法:numpy.arange(a,b,c)/ numpy.arange(a,b,c).reshape(m,n); 从 数字a起, 步长为c, 到b结束,生成array:

In [7]: np.arange(1,12,2)#间隔2生成数组,范围在1到12之间
Out[7]: array([ 1,  3,  5,  7,  9, 11])

In [8]: np.arange(1,12,2).reshape(3,2)
Out[39]: 
array([[ 1,  3],
       [ 5,  7],
       [ 9, 11]])

猜你喜欢

转载自blog.csdn.net/W_weiying/article/details/82112337