前言:
内容来源于NumPy中文文档
NumPy是一个功能强大的python库,学习它我们可以了解更高级的数据操作和科学计算。
NumPy名字来源于两个词,Numerical和Python。提供了大量关于数值计算的函数和操作。
安装
请参照文档NumPy中文文档
数组
数组是NumPy中最常用的数据结构了,一般用于表示矩阵,常见的有一维和二维矩阵。
首先,我们创建一个矩阵。
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
print(my_array)
首先我们导入了numpy这个包,并给它取了一个别名“np”。
通过np.array()构造函数创建一个数组,参数接受了一个list。
打印结果和list(range(5))一样。
目前,array和list的表现别无二致。
当然,numpy提供了很多内置函数,供我们使用,我们依次尝试:
创建长度为5的数组,并且每个元素都是0
my_zero_array = np.zeros((5,))
print("my_zero_array:{}".format(my_zero_array))
输出是:[0. 0. 0. 0. 0.]
在zeros()函数的参数中我们传递了一个tuple,其实这个tuple使用来表示数组的形状的。
举个例子说明,比如传入(2, 3),那么代表是个二维数组,2行3列。
这里我们传入(5,),代表它是个一维数组,有5个元素。
创建长度为5的数组,并且每个元素都是1
my_ones_array = np.ones(5)
和np.zeros()函数类似。
自定义二维数组
我们可以自定义数组的内容,比如[[1, 2], [3, 4]]。
my_2d_array = np.array([[1, 2], [3, 4]])
可以看到,我们直接用嵌套list的方式来表示二维数组。
二维数组取值
numpy的array支持使用索引取值,用法和list一样。
比如二维数组[[1,2], [3, 4]],我想取第一行的第二个元素,就可以使用array[0][1]
需要注意,索引都是从0开始的。
获取数组的形状
前面我们已经知道了数组的形状是如何表示的。
numpy.array有一个属性叫shape,用来获取数组的形状,结果用tuple表示。
print("my_2d_array2的形状是:{}".format(my_2d_array2.shape))
输出:(2, 2)
表示这个数组有2行2列。
按列取值
按行取值,不必说了,直接array[i]就行。
numpy提供了一种类似切片的语法让我们可以按列取值。
my_2d_array2_column_2 = my_2d_array2[:, 1]
print("my_2d_array2的第2列的值是:{}".format(my_2d_array2_column_2))
二维矩阵的加减乘除
import numpy as np
# 二维矩阵的加减乘除
# 规则是对应位置的元素执行对应的操作(逐行逐元素操作)
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum = a + b
difference = a - b
product = a * b
quotient = a / b
print("sum:{}".format(sum))
print("difference:{}".format(difference))
print("product:{}".format(product))
print("quotient:{}".format(quotient))
# 如果要执行矩阵乘法
matrix_product = a.dot(b)
print("矩阵乘法a * b: {}".format(matrix_product))
堆叠数组
import numpy as np
a = np.floor(10 * np.random.random((2,3)))
b = np.floor(10 * np.random.random((2,3)))
print("array_a:{}".format(a))
print("array_b:{}".format(b))
# 堆叠数组
# vstack,水平堆叠。
# 把b放在a的下面,比如a和b的shape都是为2*3,堆叠后是4*3
array_vstack = np.vstack((a, b))
print("array_vstack:{}".format(array_vstack))
# hstack,垂直堆叠。
# 把b放在a的右边,比如a和b的shape都是2*3,堆叠后是2*6
array_hstack = np.hstack((a, b))
print("array_hstack:{}".format(array_hstack))
数组拆分
import numpy as np
from numpy import newaxis
a = np.floor(10 * np.random.random((2,2)))
b = np.floor(10 * np.random.random((2,2)))
print("array_a:{}".format(a))
print("array_b:{}".format(b))
array_column_stack = np.column_stack((a, b))
print("array_column_stack:{}".format(array_column_stack))
# 把一维数组拆分为每个元素一个维度
# 比如[4, 2],拆分后为[[4], [2]]
c = np.array([4, 2])
print("c newaxis:{}".format(c[:, newaxis]))
# 数组拆分
# 将一组数组拆分为若干个较小的数组
d = np.floor(10 * np.random.random((2, 12)))
print("d: {}".format(d))
# 横向拆分
d_hsplit = np.hsplit(d, (3, 4))
print("横向拆分为4份:{}".format(d_hsplit))
# 纵向拆分
d_vsplit = np.vsplit(d, 2)
print("纵向拆为2份:{}".format(d_vsplit))
更改数组的形状
import numpy as np
# 更改数组的形状
a = np.floor(10 * np.random.random((3, 4)))
print("a: {}".format(a))
print("a's shape:{}".format(a.shape))
# 修改数组
# array.ravel()
# 将多为矩阵改为一维数组,方式为从第一行起,依次拼接在后面
array_ravel = a.ravel()
print("array_ravel: {}".format(array_ravel))
# array.reshape()
# 将矩阵按照指定形状排列,比如初始3行4列,reshape后改为6行2列
# 特别说明:如果某一维度参数为-1,则自动计算此维度
array_reshape = a.reshape(6, 2)
print("array_reshape: {}".format(array_reshape))
# array.T
# 转置矩阵
array_T = a.T
print("转置矩阵a:{}".format(array_T))
网友评论