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. Visual Studio 2012 与此版本的 Windows 不兼容。有关详细信息,请联系 Microsoft

    参考网址:Visual Studio 2012 与此版本的 Windows 不兼容 解决 下载更新包安装:http://www.microsoft.com/zh-CN/download/details ...

  2. CRectTracker类的使用

    CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类.你在Windows中经常看到这样的情况:它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用.如何通过编程来实现这种功能 ...

  3. Linux每天一个命令:iostat

    iostat用于输出CPU和磁盘I/O相关的统计信息 安装Sysstat工具包 centos: yum install sysstat ubuntu: sudo apt-get install sys ...

  4. hibernate 解决诡异的mysql存入中文乱码

    使用hibernate查询mysql,通过bean的get方法拿到字符串再写入mysql中的字段会中文乱码,需要String string = xxx.get(),把get方法拿到的值传入到新的str ...

  5. Java多线程编程核心技术(二)对象及变量的并发访问

    本文主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题.阅读本文应该着重掌握如下技术点: synchronized对象监视器为O ...

  6. 图解Redis之数据结构篇——简单动态字符串SDS

    图解Redis之数据结构篇--简单动态字符串SDS 前言     相信用过Redis的人都知道,Redis提供了一个逻辑上的对象系统构建了一个键值对数据库以供客户端用户使用.这个对象系统包括字符串对象 ...

  7. Ubuntu 18.04 根目录为啥只有 4G 大小

    其实准确点儿的描述应该是:Ubuntu Server 18.04 ,设置 LVM,安装完成后根目录的容量为什么只有 4G?只有 Server 版有问题,Desktop 版没有问题,Ubuntu 16. ...

  8. 全文搜索引擎 Elasticsearch 入门教程

    全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Gi ...

  9. Python—包介绍

    包(Package) 当你的模块文件越来越多,就需要对模块文件进行划分,比如把负责跟数据库交互的都放一个文件夹,把与页面交互相关的放一个文件夹, . └── my_proj ├── crm #代码目录 ...

  10. [2018福大至诚软工助教]alpha阶段小结

    [2018福大至诚软工助教]alpha阶段小结 一.得分 1. 冲刺(7次 Scrum) 150分 1)第1篇(25分) 项目 评分标准 各个成员在 Alpha 阶段认领的任务 (6分)视详细程度给分 ...