学习Numpy(一)
目录
- 理论知识
- Numpy介绍
- 1 Numpy比python数组好在哪
- 2 NumPy 大多数需要快速计算的部分都是用 C 或 C ++ 编写的。
- 3 NumPy 的源代码位于这个 github 资料库中:https://github.com/numpy/numpy
- Numpy引入
- Numpy和Python Array(数组)之间重要区别
- 代码操作
- 1.创建ndarry对象
理论知识
Numpy介绍
NumPy 数值 Python(Numerical Python)是用于处理数组的 python 库。 由 Travis Oliphant 于 2005 年创建。
1 Numpy比python数组好在哪
在 Python 中,我们有满足数组功能的列表,但是处理起来很慢。NumPy 旨在提供一个比传统 Python 列表快 50 倍的数组对象。NumPy 中的数组对象称为 ndarray,它提供了许多支持函数,使得利用 ndarray 非常容易。
NumPy 比列表更快的主要原因:
**储存方式:**NumPy 数组存储在内存中的一个连续位置,因此进程可以非常有效地访问和操纵它们。这种行为在计算机科学中称为引用的局部性。它还经过了优化,可与最新的 CPU 体系结构一同使用。
矢量化:矢量化描述了代码中没有任何显示的循环,索引等。这当然是预编译的C代码幕后优化的结果。
广播:描述操作的隐式逐元素行为的术语。一般来说,在Numpy中,所有操作,不仅仅是算术运算,而是逻辑,位,功能等,都以这种隐式的逐元素方式表现,即它们进行广播。
2 NumPy 大多数需要快速计算的部分都是用 C 或 C ++ 编写的。
3 NumPy 的源代码位于这个 github 资料库中:https://github.com/numpy/numpy
Numpy引入
NumPy 通常以 np 别名导入。
import numpy as np
查看版本
print(np.__version__)
**Numpy提供多维数组对象,**各种派生对象(如掩码数组和矩阵),以及用于各种数组快速操作的API,包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅里叶变换、基本线性代数、基本统计运算和随机模拟等。
Numpy包的核心是ndarray对象。它封装了python原生的同数据类型的n维数组。
ndarray 即n-dimension-array 的简写。
创建一个 ndarray 只需调用 NumPy 的 array 函数即可(后面会再说):
import numpy as np
a = np.array([[0,1,2],[3,4,5],[6,7,8]])
print(a)
type(a)
为了保证其性能优良,其中有许多操作都是代码在本地进行编译的。
Numpy和Python Array(数组)之间重要区别
1.Numpy数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长:使用pop(),insert(),append(),remove(),clear()函数操作)不同。更改ndarry的大小将创建一个新数组并删除原来的数组。
2.Numpy在数组中的元素都需要具有相同的数据类型,因此在内存中大小相同。 例外:Python的原生数组里包含了Numpy对象的时候,这种情况下就允许不同大小元素的数组。
3.Numpy数组有助于对大量数据进行高级数学和其他类型的计算。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少。
4.越来越多的基于Python的科学和数学软件使用Numpy数组,虽然这些工具通常都支持Python的原生数组作为参数,但它们在处理之前还是会将输入的数组转换为Numpy的数组,而且也通常输出Numpy数组。
代码操作
1.创建ndarry对象
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
实例:
array()函数,括号内可以是列表、元组、数组、迭代器,生成器等
1.1对于object
#列表
np.array([1,2,3,4,5])
type(np.array([1,2,3,4,5]))
输出:
numpy.ndarray
#元组
np.array((1,2,3,4,5))
输出:
array([1, 2, 3, 4, 5])
#迭代对象
np.array(range(10))
输出:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.array([i**2 for i in range(10)])
输出:
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
#创建10以内的偶数的数组
np.array([i for i in range(10) if i%2 == 0])
输出:
array([0, 2, 4, 6, 8])
1.2 对于dtype
#列表中元素类型不相同
np.array([1,1.5,3,4.5,'5'])
结果全部改成字符串类型
输出:
array(['1', '1.5', '3', '4.5', '5'], dtype='<U32')
输入为整型
ar1 = np.array(range(10))
ar1
输出:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
输入为浮点型
ar2 = np.array([1,2,3.14,4,5])
ar2
输出:
array([1. , 2. , 3.14, 4. , 5. ])
输入为二维数组:嵌套序列(列表,元组均可)
ar3 = np.array([[1,2,3],('a','b','c')])
ar3
输出:
array([['1', '2', '3'],['a', 'b', 'c']], dtype='<U11')
二维数组的维数不同
ar4 = np.array([[1,2,3],('a','b','c','d')])
ar4
输出:
array([list([1, 2, 3]), ('a', 'b', 'c', 'd')], dtype=object)
会有提醒:
C:\Users\14036\AppData\Local\Temp/ipykernel_19096/189647353.py:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.ar4 = np.array([[1,2,3],('a','b','c','d')])
ar4.shape
输出:两行一列,强制转化为1维
(2,)
设置数组元素类型
has_dtype_a = np.array([1,2,3,4,5],dtype='float')
has_dtype_a
输出:
array([1., 2., 3., 4., 5.])
1.3.对于copy
设置copy参数,默认为Ture
a = np.array([1,2,3,4,5])
b = np.array(a)
print('a:', id(a), ' b:',id(b))
print('以上可以看出a和b的内存地址')
输出:
a: 1894294250768 b: 1894294252208
以上可以看出a和b的内存地址
不使用ndarray,将a的值赋给b相当于列表的引用赋值
a = np.array([1,2,3,4,5])
b = a #相当于列表的引用赋值
print('a:', id(a), ' b:',id(b))
print('以上可以看出a和b的内存地址')
a: 1894294252592 b: 1894294252592
以上可以看出a和b的内存地址
1.4.对于ndmin
ndmin指定数组的维度
a = np.array([1,2,3])
print(a)
a = np.array([1,2,3],ndmin=2)
print(a)
输出:
a由一维数组变为2维数组
[1 2 3]
[[1, 2, 3]]
1.5.对于subok
subok参数,类型为bool值,默认为False.
若为True,使用object的内部数据类型;若为False:使用数组的数据类型
例子:
a = np.mat([1,2,3,4]) #创建一个矩阵
print(type(a))
#既要复制一份副本,又要保持原类型
at = np.array(a,subok=True)
af = np.array(a)print('at,subok为True:',type(at))
print('af,subok为False:',type(af))
print(id(at),id(af))
输出:
<class 'numpy.matrix'>
at,subok为True: <class 'numpy.matrix'>
af,subok为False: <class 'numpy.ndarray'>
1894294309568 1894294252688
1.6.对于order
order参数指定阵列的内存布局。当对象不是数组时, 除非指定” F”, 否则新创建的数组将以C顺序(行头或行主)出现。当指定F时, 它将按Fortran顺序(列标题或列主)。当对象是数组时, 它保持以下顺序。
默认为“K”
可以参考:
深入理解numpy库中的order参数
学习Numpy(一)相关推荐
- 学习Numpy,看这篇文章就够啦
导读:在数据分析当中,Python用到最多的第三方库就是Numpy.本文内容是「大数据DT」内容合伙人王皓阅读学习<Python 3智能数据分析快速入门>过后的思考和补充,结合这本书一起学 ...
- 从入门到入土:机器学习part02|python|初步学习|numpy|Matplotlib
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 数据分析 第四讲 numpy学习+numpy读取本地数据和索引
文章目录 数据分析第四讲 numpy学习+numpy读取本地数据 一.numpy数组 1.numpy介绍 2.numpy基础 3.numpy常见的数据类型 4.数组的形状 5.数组的计算 6.数组的广 ...
- Python 学习 —— Numpy 、Pandas 傻傻分不清楚
之前的文章里面谈到过,我从R转到Python上,一个很大的不习惯就是R的数据结构比较简单,但是Python的数据类型比较多,很容易就令人头脑混乱.但是今天学习了一下Udacity的课程,顿时就清楚多了 ...
- python 模块学习--Numpy
Numpy是Python的一个科学计算库,提供了矩阵运算的功能.安装方法可以直接使用pip install numpy命令,也可以在http://sourceforge.net/projects/nu ...
- [转载] Python 学习 - Numpy
参考链接: Python中的numpy.iscomplex Numpy 学习 Ndarray对象 特点 N 维数组对象 一系列同类型数据的集合 下标从0开始 每个元素在内存中占有相同存储大小 由什 ...
- 学习Numpy(五)
目录 一.复习Numpy数组操作和字符串操作 1.修改数组形状 2.翻转数组 3.连接数组 4.分割数组 5.数组元素的添加与删除 6.NumPy 字符串函数 二.学习新知识 1.NumPy 统计函数 ...
- python学习--numpy的数组
numpy中的数组类型为ndarry 创建 # -*- coding: utf-8 -*- import numpy as np#用列表或元组创建 a = np.array([[1,2,3],[4,5 ...
- python学习——numpy库
属性: 维度 元素类型 大小 形状 创建一维 : np.arange np.linspace 注意range()只能for循环 创建零数组 一数组 单位数组 数组拼接: hstack vstack s ...
- Numpy用法详细总结:学习numpy如何使用,看这一篇文章就足够了
Numpy用法详细总结 一.创建ndarray及查看数据类型 1. 使用np.array()由python list创建 图片与array数组的关系 2. 使用np的常用函数创建 二.ndarray的 ...
最新文章
- 字字珠玑!任正非最新内部演讲:高科技急不来,股市为了圈钱夸大太多
- 砂.随笔.三十四.用时间在等待
- xss攻击汇总--转
- “保持耐心”,永远从用户角度出发— 专访阿里巴巴淘系技术内容中台负责人吴桂林(梁舒)...
- android底部弹出显示不全,Android 解决 NestedScrollView 底部内容被遮挡显示不全
- C#面试题 之 判断质数
- 1、maven笔记(一):构建项目
- webstorm怎么建php文件夹,webstorm怎么创建css
- JAVA中Calendar与Date类型互转
- 开源syslog服务器_开源API网关Kong基本介绍和安装验证
- Velocity-模板引擎(代码生成等)
- matlab求任意输入响应曲线,3.6 用Matlab进行动态响应分析
- [渝粤教育] 西南科技大学 民事诉讼法学 在线考试复习资料(1)
- 属性子集选择的基本启发方法_【数据挖掘笔记三】数据预处理
- uni-app获取当前位置并计算出某个地点距离
- 如何设置Windows文件夹背景为黑色?(其实就是“深色模式”)
- linux修改vnc设置密码,更改root与vnc密码,配置vnc
- 省市区三级级联JSON解析打印各级key及value
- 湖南省永州市谷歌高清卫星地图下载
- 2014,寻找企业信息管理软件的蓝海