python科学计算—— numpy

  • 1.模块导入
  • 2. 数组的基本属性和操作
  • 2.1 创建一维和二维数组
  • 2.2 常用属性
  • 2.3 调整数组的形状
  • 2.4 将数组转化为list
  • 2.5 numpy的数据类型
  • 2.6 保留小数位数
  • 2.7 数组的计算
  • 2.8 数组中的轴
  • 2.9 数组的索引和切片
  • 2.10 数组中数值的修改
  • 2.11 数组的删除、添加和去重
  • 3 numpy的计算
  • 4 numpy常用数学函数
  • 5 数组的拼接和分割
  • 6 数组中nan和inf
  • 7 二维数组的转置


1.模块导入

import numpy as np

2. 数组的基本属性和操作

2.1 创建一维和二维数组

list1 = [1,5,56,6]
array_1 = np.array(list1)
array_1 = np.arange(1,10,2)

list2 = [[1,2],[5,6],[9,10]]
array_2 = np.array(list2)

2.2 常用属性

list2 = [[1,2],[5,6],[9,10]]
array_2 = np.array(list2)

array_2.ndim  # 获取数组的维度
array_2.shape # 获取数组的 index和column 返回为元组
array_2.size  # 获取数组的 元素个数

2.3 调整数组的形状

array = np.arange(24)
array.shape = (4,6) # 直接更改原数组的形状
array1 = array.reshape((12,2)) # 返回新形状的数组
array2 = array.reshape((24,),order = 'F') # 将二维数组转化为一维数组 'C'为按行展开  'F'为按列展开
array3 = array.reshape((2,3,4))

2.4 将数组转化为list

array = np.arange(24).reshape((12,2))
list1 = array.tolist() # 用一个变量来接受

2.5 numpy的数据类型

"""
    np.bool
    np.int8              整数
    np.int16
    np.int32
    np.int64
    np.uint8             无符号整数
    np.uint16
    np.uint32
    np.uint64
    np.float16           小数
    np.float32
    np.float64
    np.complex64         复数
    np.complex128
    np.object_           python对象
    np.string_           字符串
    np.unicode    
"""
array = np.array([2,3,5,6],dtype = np.int16)  # 指定数据类型
array.dtype    # 查看数据类型
array.astype(np.int8)  #更改数据类型
array.itemsize  # 查看数组中每个元素的字节长度

2.6 保留小数位数

array = np.array([np.random.random() for i in range(100)])
array1 = np.round(array,2)

2.7 数组的计算

array1 = np.arange(1,101).reshape((25,4))
array2 = np.arange(11,111).reshape((25,4))

array1*2 # 数组和数的计算
array1*array2 # 数组和数组之间的操作 对应位置数据计算

array3 = np.arange(1,26).reshape((25,1))
array4 = np.arange(1,5).reshape((1,4))

array1+array3   # 行或者列相同的一维数组和多维数组之间可以计算  即一维数组分别于多维数组的各行或者各列计算
array1*array4

2.8 数组中的轴

"""
    一维数组:0轴
    二维数组:x-0轴  y-1轴
    三维数组:x-0轴  y-1轴  z-2轴
"""
array = np.arange(1,25).reshape(2,3,4)
np.sum(array,axis = 0) #按0轴返回求和
np.sum(array,axis = 1) #按列求和
np.sum(array,axis = 2)#按行求和
np.sum(array)

2.9 数组的索引和切片

array1 = np.arange(10)
array1[1:9:2] #一维数组的索引
# 二维数组的索引
array2 = np.arange(24).reshape(4,6)
array2[[1,3]] # 取不连续的多行
array2[:,[2,5]] # 取不连续的多列
array2[[1,3],[4,5]] # 取其中几个点出来

2.10 数组中数值的修改

"""
    逻辑运算符:& | ~
    三目运算符: np.where(array > 80,input1,input2)   满足条件 输出input1,不满足输出input2  
"""
array = np.arange(24).reshape((4,6))
array[[1,3],[1,5]] = 100
array[array>20] = 199
array[(array>10) & (array<20)] = 1000
result = np.where(array>20,1,0)  # 变量接受

2.11 数组的删除、添加和去重

array = np.arange(15).reshape((3,5))
# 数组的添加
np.append(array,[2,3,6,5,6]) # 横向加成 返回一维数组
np.append(array,[[2,3,6,7,9]],axis = 0) # 沿0轴追加
np.append(array,[[2],[3],[6]],axis = 1) # 沿1轴追加

np.insert(array,1,[5,6]) # 先展开再插入
np.insert(array,1,[1,2,5,6,9],axis = 0) # 沿0轴插入
np.insert(array,1,[5,6,9],axis = 1) # 沿1轴插入
# 数组中的删除
np.delete(array,1) # 先展开再删除
np.delete(array,1,axis = 0) # 沿0轴删除
np.delete(array,2,axis = 1) # 沿1轴删除
# 数组去重
array = np.array(np.random.random(15)).reshape((3,5))
u,index,inverse,count = np.unique(array,return_index = True,return_inverse = True,return_counts = True)
print(u)
print(index)
print(inverse)
print(count)

3 numpy的计算

import numpy as np

array1 = np.arange(15).reshape((3,5))
array2 = np.array(np.random.random(15)).reshape((3,5))
# 获取最大值
np.max(array1,axis = 0) # 按轴0获取最大值
np.max(array1) # 获取最大值

# 获取最小值
np.min(array1,axis = 0) # 按轴0获取最小值
np.min(array1) # 获取最小值

# 获取平均值
np.mean(array1,axis = 0) # 按轴0获取平均值
np.mean(array1) # 获取平均值

# 数据的比较
result = np.maximum(array1,array2) # 获取两个数组中的较大值
result = np.minimum(array1,array2) # 获取两个数组中的较小值
result = np.maximum(array1,5)      # 获取较大值

# 返回给定axis上累计的和
array1.cumsum(0) # 获取沿0轴累加的数组
array1.cumsum(1) # 获取沿1轴累加的数组

# 求最小值和最大值的索引
np.argmin(array1,axis = 0)
np.argmax(array1,axis = 0)

# 计算标准差
np.std(array1,axis = 0) # 按轴0轴获取标准差
np.std(array1,axis = 1) # 按轴1轴获取标准差

# 计算方差
np.var(array1,axis = 0) # 按轴0轴获取方差
np.var(array1,axis = 1) # 按轴1轴获取方差

# 计算协方差
np.cov(array1) # 获取斜方差

# 计算中位数
np.median(array1,axis = 0) # 按轴0轴获取中位数

4 numpy常用数学函数

import numpy as np
array1 = np.arange(1,16).reshape((3,5))
array2 = np.array(np.random.random(15))
array3 = np.array(np.random.random(15)).reshape((3,5))
# 平方根函数:
np.sqrt(array1)

# 绝对值函数
np.abs(array1)

# 指数函数
np.exp(array1)
np.exp2(array1)
array1**2
2**array1

# 对数函数
np.log(np.e)
np.log2(2)
np.log10(10)
np.log(array1)/np.log(2)

# 平方函数
np.square(array1)

# 正负号计算函数
np.sign(array1)

# NaN判断函数
np.isnan(array1)

# inf判断函数
np.isinf(array1)

# 三角函数
np.sin(array1)
np.cos(array1)
np.tan(array1)
np.arcsin(array1)
np.arccos(array1)
np.arctan(array1)
np.sinh(array1)
np.cosh(array1)
np.tanh(array1)

# 小数和整数分离函数
float_b,int_n = np.modf(array2)

# 向上、向下取整函数
np.ceil(array1) 
np.floor(array2)

# 四舍五入函数
np.rint(array2)
np.round(array2,2)

# 向0取整函数
np.trunc(array2)

# 元素级乘法、加法、除法、减法
np.multiply(array1,array3)
np.divide(array1,array3)
np.add(array1,array3)
np.subtract(array1,array3)

# 矩阵乘法
np.matmul(array1,array3.T)

# 元素级求模
np.mod(array1,array3)

5 数组的拼接和分割

import numpy as np

array1 = np.arange(1,16).reshape((3,5))
array2 = np.random.randint(1,high = 100,size = 15).reshape((3,5))

# 根据轴连接
np.concatenate((array1,array2),axis = 0)
np.concatenate((array1,array2),axis = 1)

# 根据轴堆叠
np.stack((array1,array2),axis = 0)
np.stack((array1,array2),axis = 1)

# 矩阵垂直拼接
np.vstack((array1,array2))

# 矩阵水平拼接
np.hstack((array1,array2))


# 数组分割
np.split(array1,3) #水平均匀切割成三份
np.split(array1,5,axis = 1)
np.split(array1,[1]) # 按数组位置切割

np.vsplit(array1,3)
np.hsplit(array1,5)

6 数组中nan和inf

# 创建nan和inf
np.nan
np.inf

array1 = np.arange(1,16,dtype = 'float').reshape((5,3))
array1[[2,4],[2,2]] = np.nan

# 判断inf和nan是什么数据类型
type(np.nan) # floay
type(np.inf) # float

# 任意两个nan不相等
np.nan != np.nan

# 判断nan的个数
np.count_nonzero(array1 != array1)

# nan和任何数计算都是nan
np.sum(array1)

# 将nan替换为其他数
array1[np.isnan(array1)] = 0

# 处理数组中的nan
array = np.arange(1,16).reshape((5,3)).astype('float')
array[[0,4],[1,2]] = np.nan

for i in range(array.shape[1]):
    number = np.count_nonzero(array[:,i] != array[:,i])
    if number != 0:
        nonnan = array[:,i][array[:,i] == array[:,i]]
        array[:,i][np.isnan(array[:,i])] = np.mean(nonnan)

7 二维数组的转置

import numpy as np
array = np.arange(1,16).reshape((3,5))

np.transpose(array) # 转置
array.T # 转置

by CyrusMay