numpy模块:
--对numpy数值---矩阵进行科学运算
--数据分析
--tensorflow/pytorch ---张量进行科学运算
kaggle / 天池 /acm
import numpy as np
gpu -->图形显卡0---图形存储
--->numpy数组--可变
#---一维
arrl = np.array([1,2,4,6]) #[可迭代]
#二维
arr = np.array([[1,2,4],[7,8,9]])
#三维 ---》tensorflow
#属性:
T 行位互换
dtype #数组元素的数据类型,numpy数组属于python
ndim 维数
shape 维度大小(元组)
astype 类型转换
切割数组:
print(arr[:,:]) #行,列--从零开始,不要最后的
--》有步长
赋值:
print(arr[:,:] = 0)
--》逻辑取值
--数组合并:
np.hstack((arr1,arr2)) 水平
np.vstack((arr1,arr2)) 垂
np.concatenate(((arr1,arr2),axis=0/1))
numpy模块:
--是python中一种开源的数值计算扩展库。可以用来存储和处理大型numpy数组。
用途:
1.区别于list1列表。提供了数组操作,数组运算,及统计分布和简单的数学模型
2.计算速度快,甚至要优于python内置的简单运算, 使得其成为pandas、sklearn等模块的依赖包。 高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。
为什么用numpy?
list1 =[1,2,3]
list2 = [4,5,6]
--list1 * list2
lis_res = []
for i in range(len(list1)):
lis_res.append(list1[i]*list2[i])
---时间复杂度: for 循环--》o(n)
创建numpy数组:
---numpy数组即numpy的ndaray对象,创建numpy数组就是把一个列表传入np.array()方法
import numpy as np
#创建一维数组:
arr = np.array([1,2,3])# []为可变数据类型
print(arr,type(arr))
#创建二维数组
arr1 = np.array([[1,2,3],[4,5,6]])
#创建三维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
numpy数组的常用属性:
T 数组的转置(行位互换)--》高维
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
astype 类型转换
dtype 种类: bool_,int(8,16,32,64),
float(16,32,64)
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
print(arr)
[[1. 2. 3.]
[4. 5. 6.]]
print(arr.T)
[[1. 4.]
[2. 5.]
[3. 6.]]
print(arr.shape)
(2, 3) #二行,三列
numpy数组的行列数:
print(arr.shape[0])
-->行
print(arr.shape[1])
-->列
切割数组:
--numpy数组的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
#取所有元素
print(arr[:,:])
#取第一行所有元素
print(arr[:1,:])
print(arr[0, [0, 1, 2, 3]])
#取第一列所有元素
print(arr[:,:1])
#---逻辑取值,返回一个数组,
print(arr[arr>5])
--[ 6 7 8 9 10 11 12]
numpy数组按运算符取元素的原理,即通过arr > 5生成一个布尔numpy数组
print(arr > 5)
numpy数组元素替换:
--numpy数组也是一个可变类型的数据,即如果对numpy数组进行替换操作,会修改原numpy数组的元素
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(arr)
arr1 = arr.copy()
arr1[:1,:] = 0
print(arrl)
[[ 0 0 0 0]
[ 5 6 7 8]
[ 9 10 11 12]]
arr2 = arr.copy()
arr[arr>5] = 0
print(arr2)
arr3[:,:] = 0
numpy数组的合并:
arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[7, 8], [9, 10], [11, 12]])
# 合并两个numpy数组的行,注意使用hstack()方法合并numpy数组,numpy数组应该有相同的行,其中hstack的h表示horizontal水平的
print(np.hstack(arr1,arr2))
[[ 1 2 7 8]
[ 3 4 9 10]
[ 5 6 11 12]]
# 合并两个numpy数组,其中axis=1表示合并两个numpy数组的行
print(np.concatenate((arr1, arr2), axis=1))
# 合并两个numpy数组的列,注意使用vstack()方法合并numpy数组,numpy数组应该有相同的列,其中vstack的v表示vertical垂直的
print(np.vstack((arr1, arr2)))
[[ 1 2]
[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]]
# 合并两个numpy数组,其中axis=0表示合并两个numpy数组的列
print(np.concatenate((arr1, arr2), axis=0))
通过函数创建numpy数组:
array() 将列表转化为数组,可选择显示指定dtype
areange() range的numpy版,支持浮点数
linspace() 类似arange(),第三参数为数组长度
zero()/ones() 根据指定形状和dtype创建全0 / 1数组
eye() 创建单位矩阵
empty() 创建一个元素全随机数
reshape() 重塑形状
arr = np.array([1,2,3])
print(arr)
print(np.arange(10))
-[0 1 2 3 4 5 6 7 8 9]
print(np.arange(1,10,2))
--linspace / logspace
#构造一个等差数列,
print(np.linspace(0,20,5))
--[ 0. 5. 10. 15. 20.]
# 构造一个等比数列,从10**0取到10**20,取5个数
print(np.logspace(0,20,5))
--[1.e+00 1.e+05 1.e+10 1.e+15 1.e+20]
zeros / ones / eye / empty
print(n.zero(3,4))
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
print(np,eye(3))
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
构造一个4*4的随机numpy数组,里面的元素是随机生成的
print(np.empty((4, 4)))
[[ 2.31584178e+077 -1.49457545e-154 3.95252517e-323 0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 1.29074055e-231 1.11687366e-308]]
#reshape--重塑形状
arr = np.ones([2,2],dtype=int)
print(arr.reshape(4,1))
[[1]
[1]
[1]
[1]]
numpy数组运算:
+ 两个numpy数组对应元素相加
- 两个numpy数组对应元素相减
* 两个numpy数组对应元素相乘
/ 两个numpy数组对应元素相除,如果都是整数则取商
% 两个numpy数组对应元素相除后取余数
**n 单个numpy数组每个元素都取n次方,如**2:每个元素都取平方
arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[7, 8], [9, 10], [11, 12]])
print(ar11+arr2)
print(arr1**2)
[[ 8 10]
[12 14]
[16 18]]
numpy数组的转置
---numpy数组的行和列互换
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.transpose) /print(arr.T)
[1 4]
[2 5]
[3 6]]
numpy数组的逆:
--numpy数组行和列相同时,numpy数组才可逆
arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
print(np.linalg.inv(arr))
Numpy数组科学和统计方法:
sum 求和
cumsum 累加求和
mean 求平均数
std 求标准差
var 求方差
min 求最小值
max 求最大值
argmin 求最小值索引
argmax 求最大值索引
sort 排序
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr.max())
# 获取举着每一行的最大值
print(arr.max(axis=0))
# 获取numpy数组最大元素的索引位置
print(arr.argmax(axis=1))
# 获取numpy数组每一列的平均值
print(arr.mean(axis=0))
# 获取numpy数组每一列的元素的方差
print(arr.var(axis=0))
# 对numpy数组的每一列求和
print(arr.sum(axis=0))
# 第n个元素为前n-1个元素累加和
print(arr.cumsum())
numpy.random生成随机数:
rand(d0,d1,⋯,dn) 产生均匀分布的随机数 dn为第n维数据的维度
randn(d0,d1,⋯,dn) 产生标准正态分布随机数 dn为第n维数据的维度
randint(low[, high, size, dtype]) 产生随机整数 low:最小值;high:最大值;size:数据个数
random_sample([size]) 在[0,1)内产生随机数 size为随机数的shape,可以为元祖或者列表
choice(a[, size]) 从arr中随机选择指定数据 arr为1维数组;size为数组形状
uniform(low,high [,size]) 给定形状产生随机数组 low为最小值;high为最大值,size为数组形状
shuffle(a) 与random.shuffle相同 a为指定数组