Python——Numpy基础知识(一)
一、Numpy的引入
二、Numpy简介
Numpy 是一个专门用于矩阵化运算、科学计算的开源Python库,Numpy将Python相当于变成一种免费的更强大的Matlab系统
优势:
1、强大的 ndarray 多维数组结构
2、成熟的函数库
3、用于整合C/C++和Fortran代码的工具包
4、实用的线性代数、傅里叶变换和随机数模块
5、Numpy 和稀疏矩阵运算包scipy 配合使用非常方便
三、语法简介
首先,简单的创建数组及相关操作:
import numpy as np
#生成简单的一维矩阵
a=np.array([1,2,3,4])
#生成简单的二维矩阵
c=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
#获取类型
print(type(a))
8 #数组的大小可以通过其属性获得
print (a.shape,b.shape)
10 #打印数组
print (c)
#可以通过修改数组的shape属性,在爆出数组元素个数不变的情况下,改变数组每个轴的长度
c.shape=4,3
##注意,并不是对数组进行转置,而是只改变每个轴的大小
print(c)
#当某个轴的元素为-1时,将根据数组元素的阁主自动计算此轴的长度
c.shape=2,-1
print(c)
#使用reshape方法可以创建一个改变了尺寸的新数组,原数组保持不变
d=a.reshape((2,2))
print(d)
print(a)
d=c.reshape((3,3))#不能讲一个12个元素的数组分成3*3,会报错
print(c)
#数组a和d实际上时共享数据存储内存区域,修改其一另一个也会改变
输出
<class 'numpy.ndarray'>#打印类型
#shape
(4,) (3, 4)
#打印数组
[[ 1 2 3 4]
[ 4 5 6 7]
[ 7 8 9 10]]
#修改轴长
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
#修改轴长,其一参数为-1
[[ 1 2 3 4 4 5]
[ 6 7 7 8 9 10]]
#reshape
[[1 2]
[3 4]]
[1 2 3 4]
#错误
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-13-430fc5495966> in <module>()
21 print(d)
22 print(a)
---> 23 d=c.reshape((3,3))
24 print(c) ValueError: cannot reshape array of size 12 into shape (3,3)
上面的例子都是先创建一个Python序列,然后通过array函数将其转换为数组,这样做显然效率不高。因此NumPy提供了很多专门用来创建数组的函数。
初始化数组:
import numpy as np
a=np.arange(0,1,0.1)
print("a=",a)
b=np.linspace(0,1,10)
print("b=",b)
c=np.linspace(0,1,10,endpoint=False)
print("c=",c)
d=np.logspace(0,2,20)
print("d=",d)
e=np.empty((2,3),np.int)
print("e=",e)
f=np.zeros(4,np.float)
print("f=",f)
运行结果:
a= [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
b= [0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
0.66666667 0.77777778 0.88888889 1. ]
c= [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
d= [ 1. 1.27427499 1.62377674 2.06913808 2.6366509
3.35981829 4.2813324 5.45559478 6.95192796 8.8586679
11.28837892 14.38449888 18.32980711 23.35721469 29.76351442
37.92690191 48.32930239 61.58482111 78.47599704 100. ]
e= [[ 0 0 1863334416]
[ 588 0 -2147483648]]
f= [0. 0. 0. 0.]
arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值。
linspace函数通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
Endpoint 如果是真,则一定包括stop,如果为False,一定不会有stop
#numpy.logspace(start, stop, num, endpoint=true, base=10, dtype)
#数据头一定是base^start,若endpoint=True,数据尾为base^end,其余数据为base^(start,end)
logspace函数和linspace类似,不过它创建等比数列,下面的例子产生1(10^0)到100(10^2)、有20个元素的等比数列。
>>> a = np.arange(10)
>>> a[5] # 用整数作为下标可以获取数组中的某个元素
5
>>> a[3:5] # 用范围作为下标获取数组的一个切片,包括a[3]不包括a[5]
array([3, 4])
>>> a[:5] # 省略开始下标,表示从a[0]开始
array([0, 1, 2, 3, 4])
>>> a[:-1] # 下标可以使用负数,表示从数组后往前数
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a[2:4] = 100,101 # 下标还可以用来修改元素的值
>>> a
array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9]) >>> a[1:-1:2] # 范围中的第三个参数表示步长,2表示隔一个元素取一个元素
array([ 1, 101, 5, 7])
>>> a[::-1] # 省略范围的开始下标和结束下标,步长为-1,整个数组头尾颠倒
array([ 9, 8, 7, 6, 5, 4, 101, 100, 1, 0])
>>> a[5:1:-2] # 步长为负数时,开始下标必须大于结束下标
array([ 5, 101]) >>> b = a[3:7] # 通过下标范围产生一个新的数组b,b和a共享同一块数据空间
>>> b
array([101, 4, 5, 6])
>>> b[2] = -10 # 将b的第2个元素修改为-10
>>> b
array([101, 4, -10, 6])
>>> a # a的第5个元素也被修改为10
array([ 0, 1, 100, 101, 4, -10, 6, 7, 8, 9])
除了使用下标范围存取元素之外,NumPy还提供了两种存取元素的高级方法。
1、使用整数序列
当使用整数序列对数组元素进行存取时,将使用整数序列中的每个元素作为下标,整数序列可以是列表或者数组。使用整数序列作为下标获得的数组不和原始数组共享数据空间。
>>> x = np.arange(10,1,-1)
>>> x
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3, 3, 1, 8]] # 获取x中的下标为3, 3, 1, 8的4个元素,组成一个新的数组
array([7, 7, 9, 2])
>>> b = x[np.array([3,3,-3,8])] #下标可以是负数
>>> b[2] = 100
>>> b
array([7, 7, 100, 2])
>>> x # 由于b和x不共享数据空间,因此x中的值并没有改变
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3,5,1]] = -1, -2, -3 # 整数序列下标也可以用来修改元素的值
>>> x
array([10, -3, 8, -1, 6, -2, 4, 3, 2])
注:”:”用以表示当前维度的所有子模块 ; “-1”用以表示当前维度所有子模块最后一个;”负号用以表示从后往前数的元素”
2、使用布尔数组
当使用布尔数组b作为下标存取数组x中的元素时,将收集数组x中所有在数组b中对应下标为True的元素。
使用布尔数组作为下标获得的数组不和原始数组共享数据空间,注意这种方式只对应于布尔数组,不能使用布尔列表。
>>> x = np.arange(5,0,-1)
>>> x
array([5, 4, 3, 2, 1]) >>> x=np.random.rand(10)
>>> x
array([ 0.5993579 , 0.68693925, 0.74380945, 0.40993085, 0.72345401, 0.64499497, 0.48715468, 0.80924589, 0.43362779, 0.06554248])
>>> x>0.5 #对每个元素都比较
array([ True, True, True, False, True, True, False, True, False, False], dtype=bool)
>>> x[x>0.5] #将它当做索引传回原数组,只获取那些>0.5的
array([ 0.5993579 , 0.68693925, 0.74380945, 0.72345401, 0.64499497, 0.80924589])
>>> np.all(x<1) #测试x<1所返回的数组(传给all)中所有元素是否都等价True
>>> a=np.array([1,2,3])
>>> b=np.array([3,2,1])
>>> a>b #对应位置作比较
array([False, False, True], dtype=bool)
>>> a[a==b] #获取一样的
array([2])
>>>(a==b).all()
>>>(a==b).any()
>>> np.any([1,2,3,4]) #如果传入的数组中有至少一个元素等价True都返回True
True
Python——Numpy基础知识(一)的更多相关文章
- Python Numpy基础教程
Python Numpy基础教程 本文是一个关于Python numpy的基础学习教程,其中,Python版本为Python 3.x 什么是Numpy Numpy = Numerical + Pyth ...
- Python数据挖掘——基础知识
Python数据挖掘——基础知识 数据挖掘又称从数据中 挖掘知识.知识提取.数据/模式分析 即为:从数据中发现知识的过程 1.数据清理 (消除噪声,删除不一致数据) 2.数据集成 (多种数据源 组合在 ...
- NumPy 基础知识·翻译完成
原文:Numpy Essentials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 7241 ...
- 【Numpy】python机器学习包Numpy基础知识学习
一.安装:在之前的博客中已经写过:http://www.cnblogs.com/puyangsky/p/4763234.html 二.python数组切片知识: python中序列类有list.str ...
- NumPy基础知识图谱
所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载.该图谱只是NumPy的基 ...
- Python 面向对象基础知识
面向对象基础知识 1.什么是面向对象编程? - 以前使用函数 - 类 + 对象 2.什么是类什么是对象,又有什么关系? class 类: def 函数1(): pass def 函数2(): pass ...
- python 爬虫基础知识一
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 网络爬虫必备知识点 1. Python基础知识2. P ...
- Python:基础知识
python是一种解释型.面向对象的.带有动态语义的高级程序语言. 一.下载安装 官网下载地址:https://www.python.org/downloads 下载后执行安装文件,按照默认安装顺序安 ...
- Python学习-基础知识-2
目录 Python基础知识2 一.二进制 二.文字编码-基础 为什么要有文字编码? 有哪些编码格式? 如何解决不同国家不兼容的编码格式? unicode编码格式的缺点 如何既能全球通用还可以规避uni ...
随机推荐
- Clojure:将两个list合并成一个map
假设我们有两个list,分别是: (def a [“one” “two” “three”]) (def b [1 2 3]) 我们要把它们合为一个键值对应的map,做法很简单: 1. 先将a和b合为一 ...
- HDU1010-奇偶剪枝(DFS)
题目链接:Tempter of the Bone 第一次做剪枝的题目,剪枝,说实话研究的时间不短.好像没什么实质性的进展,遇到题目.绝对有会无从下手的感觉,剪枝越来越神奇了. .. . HDU1010 ...
- oc34--instancetype和id的区别
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; ...
- B1076 [SCOI2008]奖励关 状压dp&&期望dp
这个题的n<15,一看就是状压dp.但是状态不是很好想.f[][]存i关的状态j. 这个题另一个关键思想在于倒推,我一开始想的是正推,但是只能记忆化了. 题干: 题目描述 你正在玩你最喜欢的电子 ...
- 此文章介绍vue-cli脚手架config目录下index.js配置文件
此配置文件是用来定义开发环境和生产环境中所需要的参数 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单独的注释模块,请自行查看 上代码 // see http://vuejs- ...
- 原生JS---4
原生js学习笔记4——BOM操作 什么是DOM DOM:Do 1. js的组成部分 2. 一套标准,目前有DOM1和DOM2这两种标准 我们可以使用DOM操作来操作页面中的元素. DOM节点 子节点 ...
- golang——(strings包)常用字符串操作函数
(1)func HasPrefix(s, prefix string) bool 判断字符串s是否有前缀字符串prefix: (2)func HasSuffix(s, suffix string) b ...
- MYSQL 数据库命令行终端操作笔记
1.数据库登录: 1.登录本地的MYSQL数据库:mysql -u root -p 2.连接远程主机上的MYSQL数据库:mysql -h 192.168.191.2 -u root -p 123 ...
- Blender插件加载研究
目标 [x] 解析Blender插件代码加载原理, 为测试做准备 结论 采用方法3的方式, 可以在测试中保证重新加载子模块, 是想要的方式, 代码如下: _qk_locals = locals() d ...
- POJ 2418 简单trie树
Hardwood Species Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 21845 Accepted: 8551 De ...