数据分析----Numpy---变换数组形态

本文介绍NumPy中数组的重塑(reshape)与展平(ravel, flatten)操作,重塑可以改变数组的形状而不改变其数据,展平则将多维数组转换成一维数组。文章详细解释了-1在reshape中的应用,并对比了ravel与flatten函数的区别。

1.shape与2.reshape

#a1 = np.arange(15).reshape(-1,5)
#print(a1)
'''
[[ 0  1  2  3  4]
[ 5  6  7  8  9]
[10 11 12 13 14]]
'''
==注意==:reshape(m,n),如果说有一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape属性值

#a2 = a1.reshape(-1)#将多维数组变换成一维数组
#print(a2)
##[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

#a3 = a1.reshape(-1,1)
#print(a3)#生成的一定是个二维数组,行数会通过列数计算得来
'''
#[[ 0]
#[ 1]
#[ 2]
#[ 3]
#[ 4]
#[ 5]
#[ 6]
#[ 7]
#[ 8]
#[ 9]
#[10]
#[11]
#[12]
#[13]
#[14]]
'''
#a4 = a1.reshape(3,-1)
#print(a4)
'''
#[[ 0  1  2  3  4]
#[ 5  6  7  8  9]
#[10 11 12 13 14]]
'''

big_array = np.arange(10000).reshape(100,100)
#print(big_array)
'''
[[   0    1    2 ...,   97   98   99]
[ 100  101  102 ...,  197  198  199]
[ 200  201  202 ...,  297  298  299]
...,
[9700 9701 9702 ..., 9797 9798 9799]
[9800 9801 9802 ..., 9897 9898 9899]
[9900 9901 9902 ..., 9997 9998 9999]]
'''

注意:如果一个数组太大,在输出时Numpy自动省略中间部分而只打印两边元素。
#禁用Numpy的这种行为并强制打印整个数组,可以在打印之前设置如下:
#np.set_printoptions(threshold=np.NaN)
#print(big_array)
在这里插入图片描述

展平数组

1.ravel函数

说明:是reshape()函数的逆操作。不是在原数组上修改,而创建一个新数组

a1 = np.arange(10)
a2 = a1.reshape(2,5)
#print(a1)#[0 1 2 3 4 5 6 7 8 9]
#print('a2:',a2)
'''
#a2: [[0 1 2 3 4]
#[5 6 7 8 9]]
'''
a3 = a2.ravel()
#print(a3)#[0 1 2 3 4 5 6 7 8 9]

在这里插入图片描述

2.flatten函数

说明:默认为横向展平,纵向展平需要加‘F’参数

#a4 =a2.flatten()
#print('a4:',a4)#a4: [0 1 2 3 4 5 6 7 8 9]
#a5 = a2.flatten('F')
#print(a5)#[0 5 1 6 2 7 3 8 4 9]

在这里插入图片描述

ravel和flatten区别

##都能够实现将多维数组降为一维数组,
区别:在于返回的是拷贝(copy)还是返回的是视图(view)
#numpy.flatten()返回的是拷贝,对于拷贝所做的修改不会影响到原始数据。
##numpy.ravel()返回的是视图,会影响到原始数据

Example:

#a1 = np.arange(10)
#a2 = a1.reshape(2,5)
#print('a2:',a2)
'''
a2: [[0 1 2 3 4]
       [5 6 7 8 9]]
'''

#a5 = a2.flatten('F')
#a5[0] = 100
#print('a5:',a5)#a5: [100   5   1   6   2   7   3   8   4   9]
#print('a2:',a2)
'''
a2: [[0 1 2 3 4]
       [5 6 7 8 9]]
'''
a3 = np.ravel(a2)
a3[0] = 100
print('a3:',a3)#a3: [100   1   2   3   4   5   6   7   8   9]
print('a2:',a2)
'''
a2: [[100   1   2   3   4]
         [  5   6   7   8   9]]
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值