1.安装Numpy
pip install numpy
2.基本操作
import numpy as np
# 数组的创建
arr = np.arange(15) # 创建一个15个元素的一维数组
print(arr)
print(type(arr))
结果为:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
<class 'numpy.ndarray'>
# 数组数据类型的定义
# 创建一个3行4列数组,类型为float64
from numpy import float64
zeros_float_arr = np.zeros((3, 4), dtype=float64)
print(zeros_float_arr)
print(type(zeros_float_arr))
结果为:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
dtype('float64')
# 转换数组的数据类型
zeros_int32_arr = zeros_float_arr.astype(np.int32)
print(zeros_int32_arr)
print(zeros_int32_arr.dtype)
结果为:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
dtype('int32')
# 查看数组的维度和形状
a = np.array([0,1,2,3,4,5])
a
a.ndim # 返回一个数组的维度
a.shape # 返回一个数组的形状
结果为:
array([0,1,2,3,4,5])
1
(6,)
# 更改数组的形状
b = a.reshape((3.2)) # 更改a数组的形状到二维
b
b.ndim
b.shape
结果为:
array([0,1], [2,3], [4,5])
2
(3,2)
# b的数值发生改变,a的数值也会改变
b[1][0] = 77
b
a
结果为:
array([0,1], [77,3], [4,5])
array([0,1,77,3,4,5])
# 对数组直接进行乘法
d = np.array([1,2,3,4,5])
d*2
d**2
[1,2,3,4,5]*2
结果为:
array([2,4,6,8,10)
array([1,4,9,16,25])
[1,2,3,4,5,1,2,3,4,5]
# 遍历
a[np.array(2,3,4)]
a>4 # 用布尔值的方式表示
a[a>4] # 求出a>4的数值
a[a>4] = 4 # 整理孤立点
a
a.clip(1,4) # 将数据修改到括号内的间隔范围内
a
结果为:
array([77,3,4])
array([False,False,True,False,False,True],dtype=bool)
array([77,5])
array([1,1,4,3,4,4])
# 处理不存在的值
c = np.array([1,2,np.NAN,3,4])
np.isnan(c)
c[~np.isnan(c)]
np.mean(c[~np.isnan(c)]) #求取均值
结果为:
array([False,False,True,False,False])
array([1.,2.,3.,4.])
2.5
# ndarray的索引和切片
arr2 = np.arange(12).reshape(3,4)
print(arr2)
# 表示的是第二行的元素
print(arr2[1])
# 表示的是第二行第二列的元素
print(arr2[1,1])
# 表示的是第1行到第二行,第3列到第四列的所有元素
print(arr2[0:2, 2:])
# 表示的是所有行,第2列到第3列的所有元素
print(arr2[:, 1:3])
结果为:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
array([4, 5, 6, 7])
array([5])
array([[2, 3],
[6, 7]])
array([[ 1, 2],
[ 5, 6],
[ 9, 10]])
# 元素统计函数
np.mean() # 求所有元素的平均值
np.sum() # 求所有元素的和
np.max() # 求所有元素的最大值
np.min() # 求所有元素的最小值
np.std() # 求所有元素的标准差
np.var() # 求所有元素的方差
np.argmax() # 求最大值的下标索引值
np.argmin() # 求最小值的下标索引值
# 创建一个3行4列的数组,值为0-10之间的任意数
arr = np.random.randint(0, 10, (3, 4))
print(arr)
# 所有元素的和
print(np.sum(arr))
# 按列求和
print(np.sum(arr, axis=0))
# 按行求和
print(np.sum(arr, axis=1))
# 返回一个一维数组,每个元素都是之前所有元素的累加和
# print(np.cumsum(arr))
结果为:
array([[0, 9, 6, 8],
[2, 7, 5, 8],
[8, 0, 8, 7]])
68
array([10, 16, 19, 23])
array([23, 22, 23])
array([ 0, 9, 15, 23, 25, 32, 37, 45, 53, 53, 61, 68], dtype=int32)
3.NumPy和list列表
(1)NumPy的运算速度比list列表的快
(2)NumPy的灵活性不如list列表,NumPy只支持一种数据类型;list列表支持多种数据类型。
a = np.array([1,2,3])
a.dtype
结果为:
dtype('int64') # 也有可能为dtype('int32')
(3)如果的确需要使用不同的数据类型,python会强制它们使用最合理的公有的数据类型。
np.array([1, 'stringy'])
np.array([1, 'stringy', set([1,2,3])])
结果为:
array([1, 'stringy'], dtype='<U11')
array([1, 'stringy', {1,2,3}], dtype=object)