numpy

创建数组及数组属性

np.array()
  
import numpy as np
#一维数组:
# arr = np.array([1,2,3,4,5,6])  
#二维数组:
arr = np.array([[1,2,3],[2,3,4],[3,4,5]])
print("arr:",arr) # arr: [1 2 3 4 5 6]
print("arr 维度:",arr.ndim)  # arr 维度: 1
print("arr 形状:",arr.shape)  # arr 形状: (6,)
print("arr 元素总个数:",arr.size)  # arr 元素总个数: 6  
print("arr 数据类型:",arr.dtype)  # arr 数据类型: int32
print("arr 元素大小:",arr.itemsize)  # arr 元素大小: 4  占的字节数

np.arange()

#arange() 创建数组
#参数1:开始 包含
#参数2:截止 不包含
#参数3: 步长
arr = np.arange(0,10,2)  # 起始位0  截止为10 步长为2  左闭右开
print(arr,arr.dtype)  # [0 2 4 6 8]  int32

linspace 创建 ----均匀分布

#参数1:开始 包含
#参数2: 截止 包含
#参数3: 元素个数
arr = np.linspace(1,10,5)  # 起始位1 截止为10 均匀分布5个元素
print(arr,arr.dtype)  # [  1.     3.25   5.5    7.75  10.  ]   float64

logspace 创建

#参数1: 以10^开始次方 开始 包含
#参数2: 以10^开始次方 截止 包含
#参数3: 生成元素的个数
arr = np.logspace(1,3,10) # log 以10为底  10的1次方起始  10的3次方截止 生成10个元素的等比数列
print(arr,arr.dtype)

ones eye diag zeros

#参数 生成数组的shape  # 全部元素都为0
arr = np.zeros((2, 3))
print(arr)
#参数 生成数组的shape  # 全部元素都为1
arr = np.ones((2, 3))
print(arr)

#生成对角为1的数组 里面参数是一个数 表示生成数组为几行几列
arr = np.eye(3)  # 二位数组
print(arr)

#生成指定对角元素的数组 传入参数多大,就生成几行几列
arr = np.diag([1, 2, 3, 4, 5])  # 指定对角线数组
print("arr:", arr)

生成随机数

#生成自动参数个0~ 1 之间的数组  包含0 不包含1
arr = np.random.random(3)
print("arr:",arr)  # arr: [ 0.8064747   0.04547787  0.86599349]

符合正太分布的数组

arr = np.random.randn(2,3) # 标准正太分布 u=0,a=1
print("arr:",arr)

生成均匀分布的数组

#里面参数为几行几列
arr = np.random.rand(2,3) # [0,1)
print(arr)

数组索引 —直接下标、切片

#创建一个数组
arr = np.arange(10)
print("arr:",arr)  # arr: [0 1 2 3 4 5 6 7 8 9]
#取5
print(arr[5])
#取5,6,7
print(arr[5:8])
print(arr[-5:-2])

#常见一个二维数组
arr = np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]])
print("arr:",arr)

#取 前两行,所有
#利用切片取数据,同时切片,行逗号前为行,逗号后为列
print("取 前两行,所有行:",arr[:2,:])

#取第三行,4和5
print("取第三行,4和5:",arr[2,1:3])

#取第一行、第三行 的第一列和第四列数据
print("取第一行、第三行 的第一列和第四列数据:\n",arr[::2,::3])
print("取第一行、第三行 的第一列和第四列数据:\n",arr[(0,2),::3])

数组形状改变

#创建一个数组
arr = np.arange(16)
print("arr:",arr)
print("arr shape:",arr.shape)  # (16,)


#直接更改 通过shape直接指定形状 --元祖状态
arr.shape=(4,4)
print("arr:",arr)
print("arr shape:",arr.shape)

#通过reshape更改----返回新的数组
arr_new = arr.reshape(4,4)
print("arr_new:",arr_new)
print("arr_new shape:",arr_new.shape)

#创建一个高维度数组
arr = np.arange(16).reshape(4,4)
print("arr:",arr)
print("arr shape:",arr.shape)  # (16,)  16列 1行

#将高维数组展开
arr_new = arr.ravel()
print(arr_new)

#通过flatten进行展开
#参数:默认参数为C 按行展开,"F"按列展开
arr_new = arr.flatten()
print("arr_new:",arr_new)
arr_new = arr.flatten("F")
print("arr_new:",arr_new)   

arr_new2 = arr.flatten("C")
print(arr_new2)

数组组合:

import numpy as np

#创建数组
arr1 = np.arange(6).reshape(2,3)
arr2 = np.array([[1,2,3],[2,3,4]])

print("arr1:",arr1)
print("arr2:",arr2)

#横向拼接
arr_new = np.hstack((arr1,arr2))
print("arr_new:",arr_new)
arr_new_1 = np.concatenate((arr1,arr2),axis=1) # axis : 轴 阵列将沿其连接的轴。默认值为0
print(arr_new_1)

#纵向拼接
arr_new = np.vstack((arr1,arr2))
print(arr_new)
arr_new_1 = np.concatenate((arr1,arr2),axis=0)  # axis : 轴 阵列将沿其连接的轴。默认值为0
print(arr_new_1)

#concatenate 参数axis 为1 代表列,横轴方向
#axis 为0 代表行,为纵轴方向

#拼接的过程中,维度需要一致
#如果是横向拼接,必须保持行数一致
#如果是纵向拼接,必须保持列数一致

arr1 = np.arange(6).reshape(2,3)
arr2 = np.array([[1,2],[2,3],[3,4]])  # 必须保证转置之后与arr1同行同列 才能进行转置操作

arr_new = np.hstack((arr1,arr2.T))
print("arr_new:",arr_new)
#arr_new: [[0 1 2 1 2 3]
#[3 4 5 2 3 4]]
#arr_new_1 = np.concatenate((arr1,arr2),axis=1)
#print(arr_new_1)

## 数组拆分

    import numpy as np
    
    #创建数组
    arr = np.arange(16).reshape(4, 4)
    #print("arr:",arr)
    
    #横向拆分  # 平分
    #1:
    #arr1,arr2 = np.hsplit(arr,2)
    #print("arr1:",arr1)
    #print("arr2:",arr2)
    arr1_new = np.hsplit(arr, 4)
    #print(arr1_new)
    #2:
    arr2_new = np.split(arr, 2, axis=1)
    #print(arr2_new)
    
    #纵向拆分 # 平分
    #1:
    arr_new = np.vsplit(arr, 2)
    print(arr_new)
    #2:
    arr_new = np.split(arr, 4, axis=0)
    print("arr_new", arr_new)

## 矩阵创建

#矩阵与数相乘---对应元素位置成数
m2 = m1*3
print("m2:",m2)

#矩阵的相加减
#矩阵相加---对应元素位置相加
#m2 = np.mat([[1, 1, 1], [1, 1, 1]]).reshape(3,2)
#print("m2:", m2)

m3 = m1 + m2
print("m3:", m3)

#对应元素位置 相减 如果形状不同,name不能运算,广播机制的问题
m3 = m1 - m2   # 等价于 m1 + (-m2)
print("m3->:", m3)

#m2 = np.mat([[1, 1, 1], [1, 1, 1]]).reshape(3,2)
#print("m2:", m2)
##矩阵相乘
##m,n * n,l = m,l # 左矩阵 列数 必须与右矩阵 行数相同
##不推荐直接相乘
#m4 = m1 * m2
#print("m4:", m4)
##推荐使用matmul,dot
#m5 = np.matmul(m1, m2)
#print("m5:", m5)
#m6 = np.dot(m1,m2)
#print("m6:",m6)

#矩阵对应元素相乘 # 同形矩阵
m7 = np.multiply(m1,m2)
print("m7:",m7)

m = np.mat("1 2 3;4 5 6;7 8 9")

print("m:",m)
print("m 的转置:",m.T) # 行列互换
print("m 的共轭转置:",m.H) # 先共轭再转置
print("m 的逆矩阵:",m.I) # 矩阵 * 逆矩阵= E(单位矩阵)
print("m 的视图:",m.A)
print("m 的视图类型:",type(m.A))

ufunc函数

import numpy as np

#创建数组
arr1 = np.arange(4).reshape(2, 2)
print("arr1:", arr1)

arr2 = np.array([[1, 2], [1, 2]])
print("arr2:", arr2)

#四则运算
#加法---对应元素相加
arr_new = arr1 + arr2
print("arr_new:", arr_new)

#减法---对应元素相减
arr_new2 = arr1 - arr2
print("arr_new2:", arr_new2)

#乘法---对应元素相乘
arr_new3 = arr1 * arr2
print("arr_new3:", arr_new3)

#除法---对应元素的相除
arr_new4 = arr1 / arr2
print("arr_new4:", arr_new4)

#幂----对应元素的幂
arr_new5 = arr1 ** arr2
print("arr_new5:", arr_new5)

#比较运算---对应元素的比较
print("arr1 >= arr2:", arr1 >= arr2)

#逻辑运算
#any 相当于or 有一个正确就返回True  all 相当于and
print(np.any(arr1 == arr2))  # False
print(np.all(arr1 == arr2))  # False

广播机制

import numpy as np

# 创建数组
arr1 = np.array([[0,0,0,0],[1,1,1,1],[2,2,2,2],[3,3,3,3]])
print("arr1:",arr1)
print("arr1 shape:",arr1.shape)

arr2 =np.array([1,2,3,4])
print("arr2:",arr2)


# 执行相加  条件:shape : arr1: (n,m) ,arr2:(n,m) 或(n,1)或 (1,m)
arr_new = arr1+arr2
print("arr_new",arr_new)

读写文件

import numpy as np

# 以二进制进行保存数组
arr = np.arange(16).reshape(4,4)
arr2 = np.array([1,2,3,4])
arr3 = np.random.rand(3,2)

# 保存单个数组
# 参数1: 保存的文件名称
# 参数2 要保存的数组
# 保存的文件类型为 .npy 结尾的文件,保存到时候可以省略文件后缀
# np.save("./arr.npy",arr)
# print("保存完成")

# 读取我们保存的 npy文件
# arr = np.load("./arr.npy")
# print("arr:",arr)
# print("读取完成")


# 保存多个数组
# 参数1 文件路径+名称 后缀可以省略
# 后面参数: 要保存的数组
# 保存的文件类型为 .npz 结尾的文件
# 第一种保存方式
# np.savez("./arr_list.npz",arr=arr,arr2=arr2,arr3=arr3)
#
#
# # 第一种读取 .npz
# f = np.load("./arr_list.npz")
# print("arr:",arr)
# print("arr:",f['arr'])
# print("arr1:",f["arr2"])
# print("arr2:",f["arr3"])
# print("读取完成")

# 第二种保存方式
# np.savez("./arr_list1.npz",arr,arr2,arr3)
#
# # 第二种读取.npz
# f = np.load("./arr_list1.npz")
# print("f:",f)
# for temp in f:
#     print(temp)
#     print(f[temp])

# 保存成文本文件
np.savetxt("./arr.txt",arr,fmt="%d",delimiter=",")
print("保存完成")
#
# # 加载数据
# arr = np.loadtxt("./arr.txt",delimiter=",",dtype=np.int32)
# print("arr:",arr)
# print("arr 的类型:",arr.dtype)

# 加载数据2 genfromtxt (不仅可以读取txt文件)与 loadtxt区别?
arr = np.genfromtxt("./arr.txt",delimiter=",",dtype=np.int32)
print("arr:",arr)

数组排序

import numpy as np

# # 创建数组
# arr = np.arange(16,0,-1)
# print("arr:",arr)
# # 进行排序 默认升序
# arr.sort()
# print("arr:",arr)

# 创建一个二维数组
arr = np.arange(16,0,-1).reshape(4,4)
print("arr:",arr)
# axis=1 按照横向进行排序,列的方向
# arr.sort(axis=1)
# print("arr:",arr)
# axis=0 按照纵向进行排序,行的方向
arr.sort(axis=0)
print("arr:",arr)

# 创建一个数组
arr1 = np.arange(4,0,-1)
print("arr1:",arr1)

# argsort()
# 返回排序后的下标
res = arr1.argsort()
print("res:",res)

# lexsort()
a=[1,5,1,4,3,4,4]  # 排序[1,1,3,4,4,4,5] -->若a在b后  一般看法的是[0,2,4,3,5,6,1]
b=[9,4,0,4,0,2,1]  # 排序[0,0,1,2,4,4,9]--->若b在a前  一般看法是[2,4,6,5,1,3,0]
ret1 = np.lexsort((b,a))
print(ret1)  # [2 0 4 6 5 3 1]
# b在前,a在后,即是先按照a的元素进行比较
# 如a中的最小值为两个1,其索引分别为0,2,再计较b中相应索引上的值,即9,0
# 对应的最小应是:1,0,而其对应的索引为2,所以排序后返回的结果第一个值为索引2
# 下一个最小应是:1,9,而其对应的索引为0,所以排序后返回的结果第一个值为索引0
# 以此类推...
# array([2, 0, 4, 6, 5, 3, 1], dtype=int64)

ret2 = np.lexsort((a,b))
print(ret2)  # [2 4 6 5 3 1 0]
# a在前,b在后,即是先按照b的元素进行比较
# 如b中的最小值为两个0,其索引分别为0,4,再计较a中相应索引上的值,即1,3
# 对应的最小应是:0,1,而其对应的索引为2,所以排序后返回的结果第一个值为索引2
# 下一个最小应是:0,3,而其对应的索引为4,所以排序后返回的结果第一个值为索引4
# 以此类推...
# array([2, 4, 6, 5, 3, 1, 0], dtype=int64)

c=[[1,5,1,4,3,4,4],[9,4,0,4,0,2,1]]
# print(c)
ret3 = np.lexsort(c)
print(ret3)  # [2 4 6 5 3 1 0]
# 此种情况与先b后a的情况一致
# array([2, 4, 6, 5, 3, 1, 0], dtype=int64)

数组去重

import numpy as np

# 创建一个数组
arr = np.array(["1","2","3","1","1","4","5","2"])
print("arr:",arr)

# 去重 + 排序
arr_new = np.unique(arr)
print("去重结果:",arr_new)

arr1 = np.arange(16).reshape(4,4)
print("arr1:",arr1)
# 参数1 要重复的数组
# 参数2 重复的次数
# tile 重复是对整个数组进行重复
arr_new = np.tile(arr1,2)
print("arr_new:",arr_new)

# repeats 重复数据
arr = np.arange(4).reshape(2,2)
print("arr:",arr)

# 重复数据 axis为重复的轴,axis=1 表示沿着横轴重复 axis=0 表示沿着纵轴重复
# repeat 重复是对行,列进行重复 并直接写在下一行或列中
arr_new_1 = np.repeat(arr,2,axis=1)
# arr_new_1 = np.repeat(arr,2,axis=0)
print("arr_new_1:",arr_new_1)

常用指标统计

import numpy as np

# 创建一个数组
arr = np.arange(9).reshape(3, 3)
print("arr:", arr)

# sum,mean,std,var,min,max,argmin,argmax,cumsum,cumprod 指标
# print("sum 的和为:",arr.sum())

# axis=0按照行的方向进行,纵轴
print("sum 和为:", np.sum(arr, axis=0))
print("mean 平均值为:", np.mean(arr, axis=0))
print("std 标准差为:", np.std(arr, axis=0))
print("var 方差为:", np.var(arr, axis=0))
print("min 最小值为:", np.min(arr, axis=0))
print("max 最大值为:", np.max(arr, axis=0))
print("argmin 最小值下标为:", np.argmin(arr, axis=0))
print("argmax 最大值下标为:", np.argmax(arr, axis=0))
print("cumsum 累计和为:", np.cumsum(arr, axis=0))
print("cumprod 累计积为:", np.cumprod(arr, axis=0))

# axis = 1按照列的方向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值