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教程的更多相关文章

  1. CS231n课程笔记翻译1:Python Numpy教程

    译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成,Flood Sung ...

  2. Python之Numpy详细教程

    NumPy - 简介 NumPy 是一个 Python 包. 它代表 “Numeric Python”. 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric,即 NumPy 的前 ...

  3. Python 机器学习库 NumPy 教程

    0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...

  4. CS231n:Python Numpy教程

    Python 基本数据类型 容器 列表 字典 集合 元组 函数 类 Numpy 数组 访问数组 数据类型 数组计算 广播 SciPy 图像操作 MATLAB文件 点之间的距离 Matplotlib 绘 ...

  5. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

  6. python基础系列教程,数学基础系列教程,数据分析系列教程,神经网络系列教程,深度学习系列视频教程分享交流

    大家好,我是一个技术爱好者,目前对大数据人工智能很是痴迷,虽然学历只有高中,目前正在大踏步的向着人工智能狂奔,如果你也想学习,那就来吧 我的学习进度python基础(Numpy,pandas,matp ...

  7. python数据分析Numpy(二)

    Numpy (Numerical Python) 高性能科学计算和数据分析的基础包: ndarray,多维数组(矩阵),具有矢量运算能力,快速.节省空间: 矩阵运算,无需循环,可以完成类似Matlab ...

  8. [转]python与numpy基础

    来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb ...

  9. python基础系列教程——Python库的安装与卸载

    python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后 ...

  10. python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda

    ---恢复内容开始--- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda 从头开启python的开发环境搭建.安装比较简单, ...

随机推荐

  1. Android so注入(inject)和Hook技术学习(三)——Got表hook之导出表hook

    前文介绍了导入表hook,现在来说下导出表的hook.导出表的hook的流程如下.1.获取动态库基值 void* get_module_base(pid_t pid, const char* modu ...

  2. (通用版)salesforce中soql及sosl的伪‘Like’模糊检索

    salesforce里有soql.sosl两种查询语法,soql针对模糊搜索也有‘like’关键字,然而只能针对其自带字段如:Name.Id:对于自定义添加的字段如:Message__c.Note__ ...

  3. Azure Load Balancer : 动态扩展

    笔者在前文<Azure Load Balancer : 支持 IPv6>中介绍了如何通过 PowerShell 脚本创建支持 IPv6 的 Load Balancer.本文我们接着介绍如何 ...

  4. Logstash filter 的使用

    原文地址:http://techlog.cn/article/list/10182917 概述 logstash 之所以强大和流行,与其丰富的过滤器插件是分不开的 过滤器提供的并不单单是过滤的功能,还 ...

  5. Linux系统安装python3

    Centos7系统安装python3 在安装前需要安装依赖环境包,先安装gcc 编译器,命令如下: yum -y install gcc gcc-c++ make 1.首先查看是否安装python,系 ...

  6. 大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

    Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞.在敦促每位用户尽快升级系 ...

  7. Redis服务端的搭建(初级)

    前方低能,仅适合入门级菜鸟阅读,大神大牛通通闪开! 前言:redis经常被用来做缓存(原因自行科普),基于学习的需要自己搭建了一个redis服务器,考虑到项目的分布式部署,所以前期开始的时候,redi ...

  8. eclipse中不能保存汉字的解决方法

    首先分清是打开jsp页面的问题还是java文件的问题?    对于java文件,只要在你的项目上点击右键选择“Propertise”(属性)然后点击“Info”标签将里面的Text file enco ...

  9. mysql_建表

    建表 某字段多个默认值 创建表时,对多选多的字段设置两个以上的默认值时,两个默认值之间用逗号','隔开,不能加空格. create table student2( id int not null, n ...

  10. php使用gd库输出中文内容的图片

    正如标题所说那样,本文只讨论输出内容全部为中文或者包含中文的情况.如果内容全是字母或者其他字符的话,可以参考这篇博客:生成验证码 问题 此处要注意,标题中为什么要区别windows和linux分别实现 ...