numpy基础一
常用,常忘
1.随机矩阵
np.random.rand(4,3)
array([[ 0.06679473, 0.71073515, 0.5694172 ],
[ 0.95018143, 0.60161401, 0.8076899 ],
[ 0.40341822, 0.72154255, 0.92283012],
[ 0.81143322, 0.87853742, 0.38013707]])
np.random.randint(0,10,(4,3))
array([[1, 9, 5],
[6, 1, 1],
[8, 2, 0],
[3, 4, 3]])
numpy概览
import numpy as np
array=np.array([1,2,3,4])
array.shape
(4,)
array2=np.array([[1,2,3,4],[2,3,4,1]])
array2.shape
(2, 4)
array3=np.array([[1,2,3,4],[2,3,4,1]])
type(array3)
numpy.ndarray
np.array的结构
1. dtype 数据类型
2. itemsize 占了多少字节
3. shape 形状
4. size 数据个数
5. ndim 维度
6. fill填充
7. 索引和切片
* 要求array里面的数据是同一种类型,如果不是,numpy会转为一种
* int<float<String(取值类型顺序)
import numpy as np
array1=np.array([1,2,3,4])
array1.dtype
# >>> dtype('int32')
array2=np.array([1,2,3,4.5])
array2.dtype
#>>> dtype('float64')
array3=np.array([1,'2',3,4.5])
array3.dtype
#>>>dtype('<U11')
weidu=np.array([[1,2,3],[1,3,2],[4,2,1]])
print(weidu.dtype)
print(weidu.itemsize)
print(weidu.shape)
print(weidu.size)
print(weidu.ndim)
#>>> nt32
#>>> 4
#>>> (3, 3)
#>>> 9
#>>> 2
weidu2=np.array([[1,2,3],[1,3,2],[4,2,1]])
weidu2.fill(0)
print(weidu2)
# >>>
[[0 0 0]
[0 0 0]
[0 0 0]]
矩阵格式(多维的形式)
- 多维度的取值方式和list不同
- nb.array.copy 深度复制
- arange(0,100,10) 0到100 , 差值10构造等差数组
- 布尔数组作为索引取值
- 随机值random.rand(10) 0到1制作10个随机数 生成np数组
weidu3=np.array([[1,2,3],[1,3,2],[4,2,1]])
print(weidu3[1,1])
print(weidu[:,1]) #每一行的第二个数
print(weidu[:,0:2]) #每一行的第一和第二个数
weidu[:,0:2][0,1]
#>>>
3
[2 3 2]
[[1 2]
[1 3]
[4 2]]
2
one=np.array([[1,2],[3,4]])
oneCopy=one.copy()
oneCopy[0,1]=100
print(one)
print(oneCopy)
#>>>
[[1 2]
[3 4]]
[[ 1 100]
[ 3 4]]
pan_array=np.array([1,2,3,4,5,6],dtype=np.float32)
print(pan_array)
print(pan_array.dtype)
print(pan_array.nbytes) # 32位 四个字节 * 6 =24B
#>>>
[1. 2. 3. 4. 5. 6.]
float32
24
布尔数组作为索引取值
indexs=np.array([0,1,0,2,0,1,0],dtype=bool)
print(indexs)
numbers=np.array([10,20,30,4,5,7,8])
result=numbers[indexs] #在索引为true的地方取值
print(result)
#>>>>
[False True False True False True False]
[20 4 7]
随机数转化为布尔值
random_array=np.random.rand(10)
print(random_array)
boolarray=random_array>0.5
print(boolarray)
#>>>
[0.18501146 0.03588 0.04643065 0.88957392 0.15500452 0.49480942
0.28144087 0.83287192 0.72878256 0.66462199]
[False False False True False False False True True True]
按条件找到索引
array_index=np.array([1,2,3,4,5,6,8,2,1,3,11,6,8,12])
result=np.where(array_index > 8)
print(result)
print(array_index[np.where(array_index > 8)])
#>>>
(array([10, 13], dtype=int64),)
[11 12]
np.asarray 重新给np.array指定数值类型---深度copy
pan_int32=np.array([1,2,3],dtype=np.int32)
pan_float32=np.asarray(pan_int32,dtype=np.float32)
print(pan_float32)
print(pan_int32)
np.array的数值计算
- sum 求和
- prod 求积
- min 最小值
- max 最大值
- argmin最小值的索引
- argmax最大值的索引
- mean求平均值
- std 标准差
- var 方差
- clip 限定边界值
- round
- 轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。
import numpy as np
pan_array=np.array([[1,2,3],[1,2,3]])
print(pan_array)
print(pan_array.ndim)
sum
np.sum(pan_array)
#>>> 12
指定操作沿着什么轴进行
np.sum(pan_array,axis=0)
#>>> array([2, 4, 6])
np.sum(pan_array,axis=1)
#>>> array([6, 6])
-1指定最后一个维度
np.sum(pan_array,axis=-1)
#>>>
array([6, 6])
prod 求积
array_prod=np.array([[1,2,3,4],[2,2,3,5]])
array_prod.prod()
#>>>
1440
array_prod.prod(axis=0)
#>>>
array([ 2, 4, 9, 20])
array_prod.prod(axis=1)
#>>>
array([24, 60])
array_prod.prod(axis=-1)
#>>>
array([24, 60])
min最小值
array_min=np.array([[1,22,3,5],[1,12,6,7]])
array_min.min()
#>>>
1
array_min.min(axis=0)
#>>>
array([ 1, 12, 3, 5])
array([ 1, 12, 3, 5])
#>>>
array([1, 1])
max最大值
array_max=np.array([[1,2,3,4,5],[5,4,3,2,1]])
array_max.max()
#>>>
5
array_max.max(axis=0)
#>>>
array([5, 4, 3, 4, 5])
array_max.max(axis=1)
#>>>
array([5, 5])
argmin最小值索引
argmin=np.array([[1,2,3],[2,1,4]])
argmin.argmin()
#>>>
0
argmin.argmin(axis=0)
#>>>
array([0, 1, 0], dtype=int64)
argmin.argmin(axis=1)
#>>>
array([0, 1], dtype=int64)
argmax
argmax=np.array([[12,5,77,1],[2,3,4,6]])
argmax.argmax()
#>>>
2
argmax.argmax(axis=0)
#>>>
array([0, 0, 0, 1], dtype=int64)
argmax.argmax(axis=1)
#>>>
array([2, 3], dtype=int64)
mean 平均值
array_mean=np.array([[1,2,3,4],[2,3,4,5]])
array_mean.mean()
#>>>
3.0
array_mean.mean(axis=0)
#>>>
array([1.5, 2.5, 3.5, 4.5])
array_mean.mean(axis=1)
#>>>
array([2.5, 3.5])
std 标准差
array_std=np.array([[1,2,3,4],[2,3,4,5]])
array_std.std()
#>>>
1.224744871391589
array_std.std(axis=0)
#>>>
array([0.5, 0.5, 0.5, 0.5])
array_std.std(axis=-1)
#>>>
array([1.11803399, 1.11803399])
var 方差
array_var=np.array([[1,2,3],[2,3,4]])
array_var.var()
#>>>
0.9166666666666666
array_var.var(axis=0)
#>>>
array([0.25, 0.25, 0.25])
array_var.var(axis=1)
#>>>
array([0.66666667, 0.66666667])
clip 边界限定 (超过边界,就按边界取值)
array_clip=np.array([[1,2,3,4],[2,3,4,5]])
array_clip=np.array([[1,2,3,4],[2,3,4,5]])
array_clip.clip(2,4)
#>>>
array([[2, 2, 3, 4],
[2, 3, 4, 4]])
round四舍五入
array_round=np.array([[1.111,2.222,3.333,4.444],[2.111,3.222,4.333,5.444]])
array_round.round(decimals=1)
#>>>>
array([[1.1, 2.2, 3.3, 4.4],
[2.1, 3.2, 4.3, 5.4]])
array_round.round(decimals=2)
#>>>
array([[1.11, 2.22, 3.33, 4.44],
[2.11, 3.22, 4.33, 5.44]])
numpy 排序
- sort 升序排序
- argsort 排序后的位置
- linspace 等差出列造数据
- searchsorted 插入序列,返回位置
- lexsort 多维度排序
import numpy as np
sort
array_sort=np.array([5,1,2,3,4,5])
array_sort.sort()
print(array_soprt)
#>>>
[1 2 3 4 5 5]
argsort
array_argsort=np.array([1,5,2,1,3,24,2,6,5])
array_argsort.argsort()
#>>>
array([0, 3, 2, 6, 4, 1, 8, 7, 5], dtype=int64)
lispace
array_linspace=np.linspace(1,10,10)
print(array_linspace)
#>>>
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
searchsorted 查看值的位置
array_linspace=np.linspace(1,10,10)
value=np.array([1,3,4,6])
np.searchsorted(array_linspace,value)
# >>>
array([0, 2, 3, 5], dtype=int64)
print(array_linspace)
print(value)
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[1 3 4 6]
lexsort
one=np.array([6,2,4,1,2,3,4,5,6])
two=np.array([1,2,3,4,5,5,6,7,8])
result=np.lexsort([two,one])
result
array([3, 1, 4, 5, 2, 6, 7, 0, 8], dtype=int64)
数组形状
- arange(i) 生成0到i的序列,不包括i
- shape 维度/形状
- reshape 重新设置形状
- newaxis 新的维度
- squeeze 去掉空维度
- transpose/T 变化形状
- concatenate 矩阵链接
- vstack 垂直合并
- hstack 水平合并
- flatten
- ravel
arange
array_arange=np.arange(10)
print(array_arange)
#>>>
[0 1 2 3 4 5 6 7 8 9]
shape
array_shape=np.arange(10)
array_shape.shape
#>>>
(10,)
reshape
array_reshape=np.arange(10)
array_reshape.reshape(1,10) #大小必须不能改变 10个元素,变化后还是10个
#>>>
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
数组的形状
- arange(i) 生成0到i的序列,不包括i
- shape 维度/形状
- reshape 重新设置形状
- newaxis 新的维度
- squeeze 去掉空维度
- transpose/T 变化形状
- concatenate 矩阵链接
- vstack 垂直合并
- hstack 水平合并
- flatten
- ravel
arange
array_aange=np.arange(10)
#>>>
[0 1 2 3 4 5 6 7 8 9]
shape
array_shape=np.arange(10)
array_shape.shape
#>>>
(10,)
reshape
array_reshape=np.arange(10)
array_reshape.reshape(1,10) #大小必须不能改变 10个元素,变化后还是10个
#>>>
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
newaxis
array_newaxis=np.arange(10)
array_newaxis=array_newaxis[np.newaxis,:]
print(array_newaxis)
print(array_newaxis.shape)
# >>>
[[0 1 2 3 4 5 6 7 8 9]]
(1, 10)
array_newaxis=np.arange(10)
array_newaxis=array_newaxis[:,np.newaxis]
print(array_newaxis)
print(array_newaxis.shape)
#>>>
[[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]]
(10, 1)
squeeze
array_newaxis=np.arange(10)
array_newaxis=array_newaxis[:,np.newaxis,np.newaxis]
print(array_newaxis)
print(array_newaxis.shape)
#>>>
[[[0]]
[[1]]
[[2]]
[[3]]
[[4]]
[[5]]
[[6]]
[[7]]
[[8]]
[[9]]]
(10, 1, 1)
array_squeeze=array_newaxis.squeeze()
print(array_squeeze)
#>>>
[0 1 2 3 4 5 6 7 8 9]
transpose 形状转换
array_transpose=np.array([[1,2,3,4,5],[2,3,4,5,6]])
array_transpose.transpose()
#>>>
array([[1, 2],
[2, 3],
[3, 4],
[4, 5],
[5, 6]])
concatenate数组链接
a=np.array([[1,2,3,4,5],[5,4,3,2,1]])
b=np.array([[0,9,8,7,6],[6,7,8,9,0]])
array_concatenate=np.concatenate((a,b))
print(array_concatenate)
#>>>
[[1 2 3 4 5]
[5 4 3 2 1]
[0 9 8 7 6]
[6 7 8 9 0]]
array_concatnate_axis=np.concatenate((a,b),axis=1)
print(array_concatnate_axis)
#>>>
[[1 2 3 4 5 0 9 8 7 6]
[5 4 3 2 1 6 7 8 9 0]]
array_concatnate_axis.shape
#>>>
(2, 10)
vstack 垂直合并
a=np.array([[1,2,3,4,5],[5,4,3,2,1]])
b=np.array([[0,9,8,7,6],[6,7,8,9,0]])
np.vstack((a,b))
#>>>
array([[1, 2, 3, 4, 5],
[5, 4, 3, 2, 1],
[0, 9, 8, 7, 6],
[6, 7, 8, 9, 0]])
hstack 水平合并
np.hstack((a,b)) 水平合并
#>>>
array([[1, 2, 3, 4, 5, 0, 9, 8, 7, 6],
[5, 4, 3, 2, 1, 6, 7, 8, 9, 0]])
flatten 合并成一行
array_flatten=np.array([[1,2,3,4],[4,5,6,7]])
array_flatten.flatten()
#>>>
array([1, 2, 3, 4, 4, 5, 6, 7])
revel合并成一行
array_ravel=np.array([[1,2,3,4],[4,5,6,7]])
array_ravel.ravel()
#>>>
array([1, 2, 3, 4, 4, 5, 6, 7])
数组的生成
- arange
- linspace
- logspace
- meshgrid
- r_
- c_
- zeros
- ones
- empty
- fill
- zeros_like
- ones_likes
- identity 基准矩阵
range
array_arange=np.arange(10)
print(array_arange)
array_arang_b=np.arange(1,10,2)
print(array_arang_b)
array_arange_c=np.arange(1,10,5,dtype=np.float32)
#>>>
[0 1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]
linspace
array_linspace=np.linspace(1,10) ##默认等差数列个数为 50。
print(array_linspace)
array_linpsace_a=np.linspace(1,10,2)
#>>>
[1. 1.18367347 1.36734694 1.55102041 1.73469388 1.91836735
2.10204082 2.28571429 2.46938776 2.65306122 2.83673469 3.02040816
3.20408163 3.3877551 3.57142857 3.75510204 3.93877551 4.12244898
4.30612245 4.48979592 4.67346939 4.85714286 5.04081633 5.2244898
5.40816327 5.59183673 5.7755102 5.95918367 6.14285714 6.32653061
6.51020408 6.69387755 6.87755102 7.06122449 7.24489796 7.42857143
7.6122449 7.79591837 7.97959184 8.16326531 8.34693878 8.53061224
8.71428571 8.89795918 9.08163265 9.26530612 9.44897959 9.63265306
9.81632653 10. ]
logspace
np.logspace(0,1,5) # 10的0次幂到10的1次幂 5个等比列数据
#>>>
array([ 1. , 1.77827941, 3.16227766, 5.62341325, 10. ])
meshgrid
x=np.linspace(-10,10,5)
print(x)
y=np.linspace(-20,20,5)
print(y)
#>>>
[-10. -5. 0. 5. 10.]
[-20. -10. 0. 10. 20.]
x1,y1=np.meshgrid(x,y)
print(x1)
print(y1)
#>>>
[[-10. -5. 0. 5. 10.]
[-10. -5. 0. 5. 10.]
[-10. -5. 0. 5. 10.]
[-10. -5. 0. 5. 10.]
[-10. -5. 0. 5. 10.]]
[[-20. -20. -20. -20. -20.]
[-10. -10. -10. -10. -10.]
[ 0. 0. 0. 0. 0.]
[ 10. 10. 10. 10. 10.]
[ 20. 20. 20. 20. 20.]]
r_ row 行向量
np.r_[0:10:1]
#>>>
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
c_ col 列向量
np.c_[0:10:1]
#>>>
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
zeros填充0
np.zeros(5)
array([0., 0., 0., 0., 0.])
np.zeros((5,5))
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
ones填充1
np.ones(5)
#>>>
array([1., 1., 1., 1., 1.])
np.ones((5,5))
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
empty空地址
np.empty(5)
np.empty((5,5))
fill 自定义填充
a=np.empty((5,5))
a.fill(3)
print(a)
#>>>
[[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]]
zeros_like ones_like
temp=np.arange(0,10,2)
print(temp)
#>>>
[0 2 4 6 8]
result=np.zeros_like(temp)
print(result)
#>>>
[0 0 0 0 0]
result_ones=np.ones_like(temp)
print(result_ones)
#>>>
[1 1 1 1 1]
identity 对角矩阵
np.identity(5)
#>>>
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
numpy基础一的更多相关文章
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...
- 利用Python进行数据分析——Numpy基础:数组和矢量计算
利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...
- numpy 基础操作
Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...
- Numpy 基础
Numpy 基础 参考https://www.jianshu.com/p/83c8ef18a1e8 import numpy as np 简单创建数组 # 创建简单列表 a = [1, 2, 3, 4 ...
- [转]python与numpy基础
来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb ...
- python学习笔记(三):numpy基础
Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...
- Numpy基础数据结构 python
Numpy基础数据结构 NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的元数据 1.一维数组 import numpy as np ar = np.a ...
- Python Numpy基础教程
Python Numpy基础教程 本文是一个关于Python numpy的基础学习教程,其中,Python版本为Python 3.x 什么是Numpy Numpy = Numerical + Pyth ...
- NumPy基础操作
NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...
随机推荐
- SAS学习笔记26 方差分析
对于多于两组(k>2)样本均数的比较,t检验不再适用,方差分析(analysis of variance, ANOVA)则是解决上述问题的重要分析方法.方差分析由R.A.Fisher(1923) ...
- 待续:s5p6818移植 uboot 2014.07 移植
前言: 之前半年一直在嵌入式Linux移植中挣扎,不知道该从哪个方面开始入手,也失败了很多次,苦思了很久最终决定先从uboot开始. uboot版本的不同会导致添加板子的时候的配置方法会不一样.由于手 ...
- (七)Hibernate中使用JDBC
在hibernate中获取connection数据库连接有两种方法:(操作数据库常用这种方法) 1. session.doReturningWork 返回一个对象,适用于查询方法 2. sessi ...
- Linux 命令实战
命令登录 ssh UserName@RemoteIP ssh seemmo@192.168.0.1 统计文件.目录的数量 统计当前目录下文件数量:ls -l | grep "^- ...
- ifeq ifneq ifdef ifndef
条件语句中使用到了三个关键字:“ifeq”.“else”和“endif”.其中: 1. “ifeq”表示条件语句的开始,并指定了一个比较条件(相等).之后是用圆括号括包围的.使用逗号“, ...
- MYSQL8.0以上版本ROOT密码报错及修改
在登录数据库过程中,如果遇到忘记root密码时,该如何解决? 1.使用管理员权限打开命令提示符,在命令行中输入: net stop mysql 2.待mysql服务停止后,输入: mysqld -- ...
- MFC编程——Where is WinMain?
源码 #include<afxwin.h> class MyApp :public CWinApp { public: virtual BOOL InitInstance(); }; My ...
- sql注入原理,利用与防护
一.sql注入原理 注入攻击的本质就是把用户输入的数据当作代码来执行.所以注入攻击有两个必要条件 1.用户能够控制的输入. 2.原本程序要执行的代码,拼接了用户输入的数据. 二.sql注入分类 按照请 ...
- solr8.2 环境搭建 配置中文分词器 ik-analyzer-solr8 详细步骤
一.下载安装Apache Solr 8.2.0 下载地址:http://lucene.apache.org/solr/downloads.html 因为是部署部署在windows系统上,所以下载zip ...
- linux 终端命令学习
Linux 的版本不同,其终端下命令也有所差异的. cal -y / -d /-m 查看日历的 free -m /df -m 查剩余空间的 passwd -l / -u 用户名 -锁定,解锁 ...