NumPy之二:数组形状操作
来源:互联网 发布:淘宝手机版店招制作 编辑:程序博客网 时间:2024/05/19 20:46
- 改变数组形状
- 数组堆叠
- 分离数组
1. 改变数组形状
给定了每个axis上元素的数量,一个数组的形状就固定了。
>>> a = np.floor(10*np.random.random((3,4)))>>> aarray([[ 2., 8., 0., 6.], [ 4., 5., 1., 1.], [ 8., 9., 3., 6.]])>>> a.shape(3, 4)
通过一些命令,我们可以改变数组的形状:
>>> a.ravel() # flatten the arrayarray([ 2., 8., 0., 6., 4., 5., 1., 1., 8., 9., 3., 6.])>>> a.shape = (6, 2)>>> a.Tarray([[ 2., 0., 4., 1., 8., 3.], [ 8., 6., 5., 1., 9., 6.]])
reshape函数返回其参数指定的形状的数组,而ndarray.resize方法则会直接修改数组本身:
>>> aarray([[ 2., 8.], [ 0., 6.], [ 4., 5.], [ 1., 1.], [ 8., 9.], [ 3., 6.]])>>> a.resize((2,6))>>> aarray([[ 2., 8., 0., 6., 4., 5.], [ 1., 1., 8., 9., 3., 6.]])
如果在reshape操作中,某个维指定为-1,则其他维会自动计算
>>> carray([[[ 0, 1, 2], [ 10, 12, 13]], [[100, 101, 102], [110, 112, 113]]])>>> c.shape(2, 2, 3)>>> c.reshape(3,-1)array([[ 0, 1, 2, 10], [ 12, 13, 100, 101], [102, 110, 112, 113]])>>> c.reshape(3,2,-1)array([[[ 0, 1], [ 2, 10]], [[ 12, 13], [100, 101]], [[102, 110], [112, 113]]])>>> c.reshape(3,-1,2)array([[[ 0, 1], [ 2, 10]], [[ 12, 13], [100, 101]], [[102, 110], [112, 113]]])
2. 数组堆叠
一些数组可以沿着不同的axis进行堆叠。
>>> a = np.floor(10*np.random.random((2,2)))>>> aarray([[ 8., 8.], [ 0., 0.]])>>> b = np.floor(10*np.random.random((2,2)))>>> barray([[ 1., 8.], [ 0., 4.]])>>> np.vstack((a,b))array([[ 8., 8.], [ 0., 0.], [ 1., 8.], [ 0., 4.]])>>> np.hstack((a,b))array([[ 8., 8., 1., 8.], [ 0., 0., 0., 4.]])
函数column_stack可以将一维数组作为列堆叠到二维数组上。一维数组会先被转化成二维的列数组。
>>> from numpy import newaxis>>> aarray([[ 5., 4.], [ 8., 7.]])>>> zarray([20, 30])>>> np.column_stack((a,z))array([[ 5., 4., 20.], [ 8., 7., 30.]])
等价于以下过程
>>> aarray([[ 5., 4.], [ 8., 7.]])>>> zarray([20, 30])>>> z = z[ : , newaxis]>>> zarray([[20], [30]])>>> np.hstack((a,z))array([[ 5., 4., 20.], [ 8., 7., 30.]])
当然,column_stack也可以作用于两个多维数组,等价于hstack.
>>> np.column_stack((a,b)) # With 2D arraysarray([[ 8., 8., 1., 8.], [ 0., 0., 0., 4.]])>>> a = np.array([4.,2.])>>> b = np.array([2.,8.])>>> a[:,newaxis] # This allows to have a 2D columns vectorarray([[ 4.], [ 2.]])>>> np.column_stack((a[:,newaxis],b[:,newaxis]))array([[ 4., 2.], [ 2., 8.]])>>> np.vstack((a[:,newaxis],b[:,newaxis])) # The behavior of vstack is differentarray([[ 4.], [ 2.], [ 2.], [ 8.]])
对于多于二维的数组,hstack沿着数组第二个axis进行堆叠,vstack沿着第一个axis堆叠。concatenate函数允许指定axis进行堆叠,比如numpy.concatenate((a1, a2, …), axis=0)
在复杂点的例子中,r_ 和 c_ 对通过堆叠创建数组是很有用的。它们允许使用区间功能“:”:
>>> np.r_[1:4,0,4]array([1, 2, 3, 0, 4])
如果使用数组作为参数,r_ 和 c_ 默认情况下和vstack和hstack很相似,但他们允许使用一个可选参数来指定axis进行堆叠。
3. 分离数组
使用hsplit函数,可以将一个数组沿着其横轴切分开,可以指定返回的特定形状的数组数量,或者指定分界应该出现在哪些列上(注意列不是索引,列从1开始计数):
>>> a = np.floor(10*np.random.random((2,12)))>>> aarray([[ 9., 5., 6., 3., 6., 8., 0., 7., 9., 7., 2., 7.], [ 1., 4., 9., 2., 2., 1., 0., 6., 2., 2., 4., 0.]])>>> np.hsplit(a,3) # Split a into 3[array([[ 9., 5., 6., 3.], [ 1., 4., 9., 2.]]), array([[ 6., 8., 0., 7.], [ 2., 1., 0., 6.]]), array([[ 9., 7., 2., 7.], [ 2., 2., 4., 0.]])]>>> np.hsplit(a,(3,4)) # Split a after the third and the fourth column[array([[ 9., 5., 6.], [ 1., 4., 9.]]), array([[ 3.], [ 2.]]), array([[ 6., 8., 0., 7., 9., 7., 2., 7.], [ 2., 1., 0., 6., 2., 2., 4., 0.]])]
vsplit沿着纵轴切割数组,array_split函数则可以指定要沿着哪个轴(axis)切割。
0 0
- NumPy之二:数组形状操作
- NumPy形状操作 更改数组的形状
- Numpy-数组的基本操作(二)
- 数组的形状操作
- Numpy 数组属性 (二)
- numpy教程:数组操作
- numpy教程:数组操作
- numpy 数组操作
- Numpy 数组操作
- numpy数组基本操作
- numpy数组切片操作
- Numpy入门学习之(三) 数组、矩阵基本操作
- Numpy入门学习之(五)数组、矩阵中级操作
- Canvas之基本形状操作
- Numpy的array数组操作
- numpy的array数组操作
- Numpy-数组的基本操作
- numpy 数组维度操作总汇
- static关键字学习笔记
- HDUOJ1195 OpenLock简单遍历
- FFMPEG avformat_find_stream_info替换
- 每日一题(15): poj2533
- ebtables/iptables interaction on a Linux-based bridge
- NumPy之二:数组形状操作
- 图像处理与计算机视觉基础,经典以及最近发展
- Linux I2C驱动个人理解(二)
- spring cloud微服务框架 第四天
- 移动端input上传调用相机
- 数据结构—链表(三)
- 类继承学习笔记
- linux 让history显示时间
- 正则表达式