python之numpy学习(三)

数组基本操作

接上一篇文章,我们了解了如何利用 NumPy 创建各式各样的 ndarray,以及数组形状和维度的概念。接下来,我们将利用学会针对 ndarray 的各种花式操作技巧。

重设形状

reshape 可以在不改变数组数据的同时,改变数组的形状。其中,numpy.reshape() 等效于 ndarray.reshape()。reshape 方法非常简单:

numpy.reshape(a, newshape)

其中,a 表示原数组,newshape 用于指定新的形状(整数或者元组)。

np.arange(10).reshape((5, 2))

数组展开

ravel 的目的是将任意形状的数组扁平化,变为 1 维数组。ravel 方法如下:

numpy.ravel(a, order='C')

其中,a 表示需要处理的数组。order 表示变换时的读取顺序,默认是按照行依次读取,当 order='F' 时,可以按列依次读取排序。

a = np.arange(10).reshape((2, 5))
a
np.ravel(a)
np.ravel(a, order='F')

轴移动

moveaxis 可以将数组的轴移动到新的位置。其方法如下:

numpy.moveaxis(a, source, destination)

其中:

a = np.ones((1, 2, 3))

np.moveaxis(a, 0, -1)

你可能没有看明白是什么意思,我们可以输出二者的 shape属性:

a.shape, np.moveaxis(a, 0, -1).shape

轴交换

和 moveaxis 不同的是,swapaxes 可以用来交换数组的轴。其方法如下:

numpy.swapaxes(a, axis1, axis2)

其中:

a = np.ones((1, 4, 3))

np.swapaxes(a, 0, 2)

数组转置

transpose 类似于矩阵的转置,它可以将 2 维数组的横轴和纵轴交换。其方法如下:

numpy.transpose(a, axes=None)

其中:

a = np.arange(4).reshape(2, 2)
np.transpose(a)

维度改变

atleast_xd 支持将输入数据直接视为 x维。这里的 x 可以表示:1,2,3。方法分别为:

numpy.atleast_1d()

numpy.atleast_2d()

numpy.atleast_3d()

print(np.atleast_1d([1, 2, 3]))

print(np.atleast_2d([4, 5, 6]))

print(np.atleast_3d([7, 8, 9]))

类型转换

在 NumPy 中,还有一系列以 as 开头的方法,它们可以将特定输入转换为数组,亦可将数组转换为矩阵、标量,ndarray 等。如下:

这里以 asmatrix(data,dtype) 方法举例:

a = np.arange(4).reshape(2, 2)

np.asmatrix(a) # 将二维数组转化为矩阵类型

数组连接

concatenate 可以将多个数组沿指定轴连接在一起。其方法为:

numpy.concatenate((a1, a2, ...), axis=0)

其中:

a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8], [9, 10]])
c = np.array([[11, 12]])
np.concatenate((a, b, c), axis=0)

这里,我们可以尝试沿着横轴连接。但要保证连接处的维数一致,所以这里用到了 .T 转置。

a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8, 9]])
np.concatenate((a, b.T), axis=1)

数组堆叠

在 NumPy 中,以下方法可用于数组的堆叠:

这里以 stack(arrays,axis) 方法举例:

a = np.array([1, 2, 3])

b = np.array([4, 5, 6])

np.stack((a, b))

当然,也可以横着堆叠。

np.stack((a, b), axis=-1)

拆分

split 及与之相似的一系列方法主要是用于数组的拆分,列举如下:

下面,我们看一看 split 到底有什么效果:

a = np.arange(10)

np.split(a, 5)

除了 1 维数组,更高维度也是可以直接拆分的。例如,我们可以将下面的数组按行拆分为 2。

a = np.arange(10).reshape(2, 5)
np.split(a, 2)

NumPy 中还有针对数组元素添加或移除的一些方法。

删除

首先是 delete 删除:

a = np.arange(12).reshape(3, 4)

np.delete(a, 2, 1)

这里代表沿着横轴,将第 3 列(索引 2)删除。当然,你也可以沿着纵轴,将第三行删除。

np.delete(a, 2, 0)

数组插入

再看一看 insert插入,用法和 delete 很相似,只是需要在第三个参数位置设置需要插入的数组对象:

a = np.arange(12).reshape(3, 4)
b = np.arange(4)
np.insert(a, 2, b, 0)

附加

append 的用法也非常简单。只需要设置好需要附加的值和轴位置就好了。它其实相当于只能在末尾插入的 insert,所以少了一个指定索引的参数。

a = np.arange(6).reshape(2, 3)
b = np.arange(3)
np.append(a, b)

注意 append方法返回值,默认是展平状态下的 1 维数组。

重设尺寸

resize 就很好理解了,直接举例子吧:

a = np.arange(10)

a.resize(2, 5)

a

你可能会纳闷了,这个 resize 看起来和上面的 reshape一样呢,都是改变数组原有的形状。

其实,它们是有区别的,区别在于对原数组的影响。reshape 在改变形状时,不会影响原数组,相当于对原数组做了一份拷贝。而 resize 则是对原数组执行操作。

翻转数组

在 NumPy 中,我们还可以对数组进行翻转操作:

a = np.arange(16).reshape(4, 4)
print(np.fliplr(a))
print(np.flipud(a))
展开阅读全文

页面更新:2024-05-18

标签:标量   纵轴   重设   维度   末尾   数组   矩阵   形状   深度   索引   方向   位置   类型   操作   方法   体育

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top