【Python】Python-Numpy教程
Numpy的使用
读txt数据:
· genfromtxt
import numpy as np
print(help(np.genfromtxt))
#data = np.genfromtxt("txtname",delimiter = ',',dtype = str)
创建矩阵
#一维
array1 = np.array([1,2,3,4])
print(array1)
print(array1.shape)
#元素的数据类型
## np.array中的数据类型必须是完全相同的,否则自动转化
array1.dtype
[1 2 3 4]
(4,)
dtype('int32')
#二维
## 几维就几层中括号
array2 = np.array([[1.0,2,3],[1,3,4],[13,32,23]])
print(array2)
print(array2.shape)
# shape打印维度
array2.dtype
[[ 1. 2. 3.]
[ 1. 3. 4.]
[13. 32. 23.]]
(3, 3
dtype('float64')
索引取array元素
d1 = array2[1,1]
print(d1)
d2 = array1[1]
print(d2)
d3 = array2[0:2,0:3]
print(d3)
3.0
2
[[1. 2. 3.]
[1. 3. 4.]]
## 不用for,直接==来判断array中的每一个元素
#array2 == 1.0
### 返回的布尔值做索引
index = (array2[:,2] == 23.0) ## 注意这里,必须指定哪一列中找,即维度必须是1
## 这个功能是,找array中第2列是否有23.0,并把23.0所在的行找出来,用的就是bool值做索引的功能
print(index)
print(index.dtype)
print(array2[index,:])
[False False True]
bool
[[13. 32. 23.]]
index2 = (array2 >=0) & (array2 <=10)
print(index2)
array2[index2] = 50
print(array2)
[[False False False]
[False False False]
[False False False]]
[[50. 50. 50.]
[50. 50. 50.]
[13. 32. 23.]]
类型转换
#### astype
data = np.array(["1","1","23"])
print(data)
print(data.dtype)
data2 = data.astype(int)
print(data2.dtype)
print(data2)
data3 = data.astype(float)
print(data3)
print(data3.dtype)
['1' '1' '23']
<U2
int32
[ 1 1 23]
[ 1. 1. 23.]
float64
矩阵操作 min max mean
### axis = 0表示对每一列进行操作 axis = 1表示对每一行进行操作---important
data = np.array([[1,2,3],[4,5,6],[10,3,100]])
print(data.min())
print(data.max(axis = 1))
print(data.max())
print(data.sum())
print(data.mean())
print(data.sum(axis = 0))
1
[ 3 6 100]
100
134
14.88888888888889
[ 15 10 109]
np.arange(int)函数
## ndim:返回矩阵的维度,一维/二维/三维...
data = np.arange(15)
print(data)
data = data.reshape((3,5))
print(data.ndim)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
2
一些属性
### ndim:维度
### size:个数
### shape:具体维度(如m*n的)
### dtype.name:元素类型名
print(data.size)
print(data.dtype)
print(data.dtype.name)
print(data.shape)
15
int32
int32
(3, 5)
矩阵初始化
### 0矩阵
data = np.zeros((3,4),dtype = np.int32)
print(data)
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
### 1矩阵
data = np.ones((2,3,4),dtype = np.int32)
print(data)
[[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
### 随机矩阵 random模块的random/randn()
### 注意生成二维的,randn不需要()内再套();而random需要
data = np.random.randn(3,4)
print(data)
[[ 0.60265787 0.2971228 -1.02996186 -0.0770739 ]
[ 0.56146227 2.02195675 -0.95355635 0.94009896]
[-1.20817689 -2.25813361 1.53286479 -1.67023459]]
arange用法
### np.arange(start,end,pad);从start到end 步长为pad
data = np.arange(0,10*np.pi,np.pi)
print(data)
print(np.pi)
[ 0. 3.14159265 6.28318531 9.42477796 12.56637061 15.70796327
18.84955592 21.99114858 25.13274123 28.27433388]
3.141592653589793
linspace函数
### np.linspace(start,end,num);从start到end的num个数,等距取数
data = np.linspace(0,np.pi,100)
print(data)
print(np.sin(data))
[0. 0.03173326 0.06346652 0.09519978 0.12693304 0.1586663
0.19039955 0.22213281 0.25386607 0.28559933 0.31733259 0.34906585
0.38079911 0.41253237 0.44426563 0.47599889 0.50773215 0.53946541
0.57119866 0.60293192 0.63466518 0.66639844 0.6981317 0.72986496
0.76159822 0.79333148 0.82506474 0.856798 0.88853126 0.92026451
0.95199777 0.98373103 1.01546429 1.04719755 1.07893081 1.11066407
1.14239733 1.17413059 1.20586385 1.23759711 1.26933037 1.30106362
1.33279688 1.36453014 1.3962634 1.42799666 1.45972992 1.49146318
1.52319644 1.5549297 1.58666296 1.61839622 1.65012947 1.68186273
1.71359599 1.74532925 1.77706251 1.80879577 1.84052903 1.87226229
1.90399555 1.93572881 1.96746207 1.99919533 2.03092858 2.06266184
2.0943951 2.12612836 2.15786162 2.18959488 2.22132814 2.2530614
2.28479466 2.31652792 2.34826118 2.37999443 2.41172769 2.44346095
2.47519421 2.50692747 2.53866073 2.57039399 2.60212725 2.63386051
2.66559377 2.69732703 2.72906028 2.76079354 2.7925268 2.82426006
2.85599332 2.88772658 2.91945984 2.9511931 2.98292636 3.01465962
3.04639288 3.07812614 3.10985939 3.14159265]
[0.00000000e+00 3.17279335e-02 6.34239197e-02 9.50560433e-02
1.26592454e-01 1.58001396e-01 1.89251244e-01 2.20310533e-01
2.51147987e-01 2.81732557e-01 3.12033446e-01 3.42020143e-01
3.71662456e-01 4.00930535e-01 4.29794912e-01 4.58226522e-01
4.86196736e-01 5.13677392e-01 5.40640817e-01 5.67059864e-01
5.92907929e-01 6.18158986e-01 6.42787610e-01 6.66769001e-01
6.90079011e-01 7.12694171e-01 7.34591709e-01 7.55749574e-01
7.76146464e-01 7.95761841e-01 8.14575952e-01 8.32569855e-01
8.49725430e-01 8.66025404e-01 8.81453363e-01 8.95993774e-01
9.09631995e-01 9.22354294e-01 9.34147860e-01 9.45000819e-01
9.54902241e-01 9.63842159e-01 9.71811568e-01 9.78802446e-01
9.84807753e-01 9.89821442e-01 9.93838464e-01 9.96854776e-01
9.98867339e-01 9.99874128e-01 9.99874128e-01 9.98867339e-01
9.96854776e-01 9.93838464e-01 9.89821442e-01 9.84807753e-01
9.78802446e-01 9.71811568e-01 9.63842159e-01 9.54902241e-01
9.45000819e-01 9.34147860e-01 9.22354294e-01 9.09631995e-01
8.95993774e-01 8.81453363e-01 8.66025404e-01 8.49725430e-01
8.32569855e-01 8.14575952e-01 7.95761841e-01 7.76146464e-01
7.55749574e-01 7.34591709e-01 7.12694171e-01 6.90079011e-01
6.66769001e-01 6.42787610e-01 6.18158986e-01 5.92907929e-01
5.67059864e-01 5.40640817e-01 5.13677392e-01 4.86196736e-01
4.58226522e-01 4.29794912e-01 4.00930535e-01 3.71662456e-01
3.42020143e-01 3.12033446e-01 2.81732557e-01 2.51147987e-01
2.20310533e-01 1.89251244e-01 1.58001396e-01 1.26592454e-01
9.50560433e-02 6.34239197e-02 3.17279335e-02 1.22464680e-16]
矩阵的运算
### 两个矩阵直接+-*/是对应元素进行运算
### **n的意思是n次方
data1 = np.array([10,20,30,40])
data2 = np.arange(4)
print(data1+data2)
print(data1*data2)
print(data2**2)
## 维度不同呢?有广播机制,如下
print(data1-1)
[10 21 32 43]
[ 0 20 60 120]
[0 1 4 9]
[ 9 19 29 39]
矩阵的乘法:*乘法与dot内积
A = np.array([[1,1],[1,1]])
B = np.array([[3,4],[5,6]])
C= A*B
print(C)
D = A.dot(B)
E = np.dot(A,B)
print(D)
print(E)
### E.T 转置
print(E.T)
[[3 4]
[5 6]]
[[ 8 10]
[ 8 10]]
[[ 8 10]
[ 8 10]]
[[ 8 8]
[10 10]]
矩阵的其他操作
### 取整操作
np.ceil(A) ##向上取整
np.floor(B) ##向下取整
np.round(B) ##四舍五入
array([[3, 4],
[5, 6]])
维度变换操作
## 一维--》二维
## reshape(m,n),m行n列操作
## 第二维可以用-1代替
A = np.array([1,2,3,4,5,6])
print(A.reshape(2,-1))
## 二维--》一维 flatten操作
## ravel():直接展成一行
B = A.reshape(2,-1)
print(B.ravel())
[[1 2 3]
[4 5 6]]
[1 2 3 4 5 6]
多个矩阵的连接(横向h,纵向v)以及矩阵的分割操作
### 连接 np.hstack((a,b))与np.vstack((a,b))
##### 注意有两层括号
A = np.floor(np.random.random((3,4))*10)
B = np.floor(np.random.random((3,4))*10)
print(A)
print(B)
print(np.hstack((A,B)))
print(np.vstack((A,B)))
[[2. 2. 1. 3.]
[7. 8. 8. 0.]
[2. 0. 2. 6.]]
[[2. 8. 3. 1.]
[0. 8. 9. 7.]
[3. 3. 3. 9.]]
[[2. 2. 1. 3. 2. 8. 3. 1.]
[7. 8. 8. 0. 0. 8. 9. 7.]
[2. 0. 2. 6. 3. 3. 3. 9.]]
[[2. 2. 1. 3.]
[7. 8. 8. 0.]
[2. 0. 2. 6.]
[2. 8. 3. 1.]
[0. 8. 9. 7.]
[3. 3. 3. 9.]]
### 分割矩阵
#### 横着切分(横着切对应于hstack,即行不变,把原矩阵切割成指定列数组成小矩阵)
#### stack需要两层括号,而split只需要一层括号
##### hsplit(A,3):把A横着切成3块
##### hsplit(A,(n1,n2,n3..n4)):第二个参数是元组,是刀口的位置
A = np.floor(10*np.random.random((2,12)))
B,C,E = np.hsplit(A,3)
print(A)
print(B)
print(np.hsplit(A,(3,4)))
[[3. 1. 5. 3. 0. 7. 6. 3. 3. 1. 4. 0.]
[6. 5. 2. 3. 8. 8. 2. 4. 0. 8. 9. 3.]]
[[3. 1. 5. 3.]
[6. 5. 2. 3.]]
[array([[3., 1., 5.],
[6., 5., 2.]]), array([[3.],
[3.]]), array([[0., 7., 6., 3., 3., 1., 4., 0.],
[8., 8., 2., 4., 0., 8., 9., 3.]])]
### 纵向切分
A = A.T
print(A)
print(help(np.vsplit))
print(np.vsplit(A,4))
print(np.vsplit(A,(2,4)))
[[3. 6.]
[1. 5.]
[5. 2.]
[3. 3.]
[0. 8.]
[7. 8.]
[6. 2.]
[3. 4.]
[3. 0.]
[1. 8.]
[4. 9.]
[0. 3.]]
复制操作-复制的三种方式
### A=B : A和B相当于指针,指向同一段地址区域,AB完全一样,并且改变A,B也改变,shape亦如此
A = np.array([1,2,3,4])
B =A
print(id(A))
print(id(B))
print(A is B)
1896998399632
1896998399632
True
### 方法二 A.view():浅复制AB不是一个东西了,shape改变不影响,但AB仍然指向同一区域
B = A.view()
print(A is B)
print(id(A))
print(id(B))
False
1896998398112
1896998399072
### 方法三:深复制 A.copy()AB完全不同了,另开辟区域
B = A.copy()
print(A is B)
B[1] = 1234
print(A)
print(B)
False
[1 2 3 4]
[ 1 1234 3 4]
np.argmax(A,axis = 1/0)操作
### np.argmax(A,axis = 1/0)操作:寻找某一行axis = 1/列axis=0的最大值所在的索引数
A = np.floor(np.random.random((3,4))*10)
ind = np.argmax(A,axis = 0)
print(A)
print(ind)
# 找出最大值
print(A[ind,range(A.shape[1])])
print(A[1,0:4])
[[1. 9. 4. 8.]
[8. 8. 5. 5.]
[4. 7. 8. 1.]]
[1 0 2 0]
[8. 9. 8. 8.]
[8. 8. 5. 5.]
np.tile(a,(3.5))扩展函数
#### np.tile(a,(3.5))扩展函数。把a扩展3*5次,横向3纵向5
A = np.arange(10,40,5)
print(A)
B = np.tile(A,(2,3))
print(B)
[10 15 20 25 30 35]
[[10 15 20 25 30 35 10 15 20 25 30 35 10 15 20 25 30 35]
[10 15 20 25 30 35 10 15 20 25 30 35 10 15 20 25 30 35]]
排序操作sort 升序
A = np.array([[1,2,3,4],[1,5,3,2],[4,2,1,10]])
print(A)
A.sort(axis = 1)
print(A)
#### argsort(),返回排序的索引
B = np.array([[1,2,3,4],[1,5,3,2],[4,2,1,10]])
t = B.argsort(axis = 1)
print(t)
print(B[:,t])
[[ 1 2 3 4]
[ 1 5 3 2]
[ 4 2 1 10]]
[[ 1 2 3 4]
[ 1 2 3 5]
[ 1 2 4 10]]
[[0 1 2 3]
[0 3 2 1]
[2 1 0 3]]
[[[ 1 2 3 4]
[ 1 4 3 2]
[ 3 2 1 4]]
[[ 1 5 3 2]
[ 1 2 3 5]
[ 3 5 1 2]]
[[ 4 2 1 10]
[ 4 10 1 2]
[ 1 2 4 10]]]
【Python】Python-Numpy教程的更多相关文章
- CS231n课程笔记翻译1:Python Numpy教程
译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成,Flood Sung ...
- Python之Numpy详细教程
NumPy - 简介 NumPy 是一个 Python 包. 它代表 “Numeric Python”. 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric,即 NumPy 的前 ...
- Python 机器学习库 NumPy 教程
0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...
- CS231n:Python Numpy教程
Python 基本数据类型 容器 列表 字典 集合 元组 函数 类 Numpy 数组 访问数组 数据类型 数组计算 广播 SciPy 图像操作 MATLAB文件 点之间的距离 Matplotlib 绘 ...
- Python数据分析基础教程
Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...
- python基础系列教程,数学基础系列教程,数据分析系列教程,神经网络系列教程,深度学习系列视频教程分享交流
大家好,我是一个技术爱好者,目前对大数据人工智能很是痴迷,虽然学历只有高中,目前正在大踏步的向着人工智能狂奔,如果你也想学习,那就来吧 我的学习进度python基础(Numpy,pandas,matp ...
- python数据分析Numpy(二)
Numpy (Numerical Python) 高性能科学计算和数据分析的基础包: ndarray,多维数组(矩阵),具有矢量运算能力,快速.节省空间: 矩阵运算,无需循环,可以完成类似Matlab ...
- [转]python与numpy基础
来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb ...
- python基础系列教程——Python库的安装与卸载
python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后 ...
- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda
---恢复内容开始--- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda 从头开启python的开发环境搭建.安装比较简单, ...
随机推荐
- linux驱动编写之poll机制
一.概念 1.poll情景描述 以按键驱动为例进行说明,用阻塞的方式打开按键驱动文件/dev/buttons,应用程序使用read()函数来读取按键的键值.这样做的效果是:如果有按键按下了,调用该re ...
- jqGrid之treeGrid及行拖拽
单纯的做个小记录 今天做功能用到了jqGrid里面的treeGrid,遇到几个问题,这里做下记录 treeGrid 树表格的应用在官网给出了很直白的例子: 1.http://blog.mn886.ne ...
- Hadoop重新格式化HDFS的方法
1.查看hdfs-site.xml: <property> <name>dfs.name.dir</name> <value>/home/hadoop/ ...
- 如何让.net程序支持TLS1.2
1.将.Net FrameWork设置成4.6以上版本 2.在需要的类中引入命名空间 using System.Net; 3.在程序调用接口(如支付)的地方,加一段代码即可 System.Net.Se ...
- js总结:对于字符串的切割截取和合并
1.函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str=”jpg|bmp|gif|ico|png”; arr=str.split(”|”); //arr是一个包 ...
- Python之参数类型、变量
一.参数类型 (一)形参与实参 要使用局部变量时,只能通过return的方式返回 def my(name): #函数体 return name my('lrx') #name是形参,lrx是实参 不写 ...
- react组件选项卡demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- artTemplate精彩文章(个人阅读过)
轻量级artTemplate引擎 实现前后端分离—基础篇 :https://www.imooc.com/article/20263 轻量级artTemplate引擎 实现前后端分离—语法篇 : htt ...
- 12 Connections
1 and 出现在两个及以上的词,词组,或者句子之间,将它们连接起来.在正式的书面英语中,and不能出现在句首.在非正式的英语中可以. We should expand our product lin ...
- [转帖]linux 清空history以及记录原理
linux 清空history以及记录原理 自己的linux 里面总是一堆 乱七八槽输错的命令 用这个办法 可以清空 linux的内容. 清爽一些. 1.当前session执行的命令,放置缓存中,执行 ...