numpy中函数resize与reshape,ravel与flatten的区别

这两组函数中区别很是类似,都是一个不改变之前的数组,一个改变数组本身

resize和reshape

>>> import numpy as np
>>> a = np.arange(20).reshape(4,5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> a.reshape(2,10)
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> a.resize(2,10)
>>> a
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])

两个函数都是改变数组的形状,但是resize是在本身上进行操作,reshape返回的是修改之后的参数


ravel和flatten

两者都可以将数组转换为一个维,

flatten(order='C')
参数:{‘C’,‘F’,‘A’,‘K’}

默认情况下‘C’以行为主的顺序展开,‘F’(Fortran风格)意味着以列的顺序展开,‘A’表示如果a在内存中为Fortran连续,则按列展开,否则以行展开,‘K’按照元素在内存中出现的顺序展平a

>>> a = np.arange(6).reshape(2,3)
>>> a.flatten()
array([0, 1, 2, 3, 4, 5])
>>> a.ravel()
array([0, 1, 2, 3, 4, 5])
>>> a.flatten('F')
array([0, 3, 1, 4, 2, 5])
>>> a.ravel('F')
array([0, 3, 1, 4, 2, 5])
>>> 
>>> x = np.array([[1,2],[3,4]])
>>> a = np.arange(6).reshape(2,3)
>>> a.flatten()[...] = 1
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> a.ravel()[...] = 1
>>> a
array([[1, 1, 1],
       [1, 1, 1]])
>>> 
flatten不会影响原始矩阵,返回的是一个副本,但是ravel是会修改数组

numpyreshaperesize都可以用于改变数组的形状,但它们之间存在一些差别。 1. reshape reshape方法可以在不改变数组元素的情况下改变数组的形状,返回一个新的数组。其用法如下: ``` numpy.reshape(arr, newshape, order='C') ``` 其,arr表示要改变形状的数组,newshape是一个整数或者一个整数元组,表示新的形状。order参数表示新数组的存储顺序,可以为'C'或'F'。 例如: ``` import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.reshape(a, (3, 2)) print(a) print(b) ``` 输出为: ``` [[1 2 3] [4 5 6]] [[1 2] [3 4] [5 6]] ``` 2. resize resize方法可以改变数组的形状,并且可以改变数组元素的数量。如果新的形状比原来的形状大,那么新数组的某些元素将被重复。如果新的形状比原来的形状小,那么新数组的某些元素将被删除。其用法如下: ``` numpy.resize(arr, new_shape) ``` 其,arr表示要改变形状的数组,new_shape是一个整数元组,表示新的形状。 例如: ``` import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.resize(a, (3, 2)) print(a) print(b) ``` 输出为: ``` [[1 2 3] [4 5 6]] [[1 2] [3 4] [5 6]] ``` 再例如: ``` import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.resize(a, (3, 3)) print(a) print(b) ``` 输出为: ``` [[1 2 3] [4 5 6]] [[1 2 3] [4 5 6] [1 2 3]] ``` 可以看到,当新形状比原来的形状大时,resize方法会重复原数组的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值