ndarray笔记
Numpy的介绍
1. Ndarray:N-dimensional array, N维数组
2. 一种由相同类型的元素组成的多维数组,元素数量是事先指定好的
例:建立Ndarray多维数组 ndarray父类实现矩阵的创建基本方式:
arr = np.array(
[
[1,2,3,4],
[2,3,4,5]
])
这是一个二维数组arr.ndim为2 这个数组的形状arr.shape为(2, 4)即2行4列
这个数组的元素个数np.size为8个,这个数组的数据类型arr.dtype为int32
shape属性-->几行几列
ndim属性-->几维度 向量-->1维度 矩阵-->二维度 数组-->3维度
size属性-->数组元素的个数
dtype-->元素类型
# 矩阵的定义
import numpy as np
b = np.array([[1,2,3,4], [2,3,4,5]])
print(b)
print(type(b)) # 矩阵的性质几行几列
print('shape',b.shape) # (2,4)
# 几维度 向量-->1维度 矩阵-->二维度 数组-->3维度
print(b.ndim) #
# 元素类型
print(b.dtype) # int32
# 数组元素的个数
print(b.size) # 8 => 2*4
3. 元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型
例:
np.array(['Python','cctv','ibeifeng','hello world'],dtype='|S4')
输出结果array([b'Pyth', b'cctv', b'ibei', b'hell'], dtype='|S4')
其中S4中的S表示字符串型,4表示每个字符串长度为4,所以输出结果每个数组只有4个字符
arr3 = np.array(['1','2','3','4'],dtype='int') # 表明arr3为整型
# 输出array([1, 2, 3, 4])
arr3 = np.array(['1','2','3','4'],dtype='float') # 表明arr3为浮点型
# 输出array([1., 2., 3., 4.])
4. 大小固定,创建好数组时一旦指定好大小,就不会再发生改变
数组的形状可以方便的读取数字例如
arr1 = np.array([[[ 1, 2, 3, 4, 5],
[ 2, 3, 4, 5, 6],
[ 3, 7, 4, 5, 6],
[ 3, 1, 4, 6, 7]],
[[11, 2, 23, 54, 5],
[28, 32, 42, 53, 46],
[35, 27, 74, 55, 86],
[63, 61, 44, 64, 87]]])
这个数组的形状为(2,4,5)可以通过arr1[0][1][1]这个形式取到3
ndarray的常见创建方式
- array函数:接收一个普通的Python序列,转成ndarray
- zeros函数:创建指定长度或形状的全零数组
np.zeros((3,4)) 创建3行4列全为0的数组,且默认为float型
3. ones函数:创建指定长度或形状的全1数组
np.ones((3,4),dtype=int) 创建3行4列全为1的整形数组,如果没有dtype=int,默认为float型
4. empty函数:创建一个没有任何具体值的数组(准确地说是一些未初始化的垃圾值)
np.empty((7,4)) 创建7行4列随机值数组,float型
ndarray的其他创建方式
1.arrange函数:类似与python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值
np.arange(2,20,3)
# 输出 array([ 2, 5, 8, 11, 14, 17])
2. linspace函数:通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值,它创建的是等差数列
np.linspace(2,20,3) 包含20
# 输出 array([ 2., 11., 20.])
3.logspace函数:和linspace类似,但它创建的是等比数列
np.logspace(2,20,3)
# 输出 array([1.e+02, 1.e+11, 1.e+20])
4.使用随机数填充数组,即使用numpy.random模块的random()函数,数组所包含的元素数量由参数决定
np.random.random((2,3,4))
# 输出 array([[[0.40595225, 0.80061568, 0.16821289, 0.05557114],
[0.96146758, 0.81135374, 0.93132755, 0.11023897],
[0.79526355, 0.61563423, 0.78924163, 0.21849418]],
[[0.36029206, 0.883596 , 0.60343721, 0.38746385],
[0.92802328, 0.91256992, 0.61305594, 0.86444498],
[0.6619579 , 0.55846171, 0.37563522, 0.35721423]]])
np.random.random_sample()生成一位随机数
ndarry的shape属性巧算
np.arange(2,20,2).reshape((3,-1)) # -1 则会自动计算维度
# 输出 array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
总结:
- 先规范显示出数组
- 层层去中括号对,直到无中括号对,每去一层,一个维度,去掉一层[],后的元素个数(逗号隔开)即该维度的元素个数
NumPy中的数据类型
1. 创建NumPy数组时可以通过dtype属性显示指定数据类型,如果不指定,NumPy会自己推断出合适的数据类型,所以一般无需显示指定
arr2=np.arange(2,10,2),无需指定可判断为int32型
2. astype方法,可以转换数组的元素数据类型,得到一个新数组
arr3 = arr2.astype('float') # 为float64型
# 输出array([2., 4., 6., 8.])
arr4 = arr2.astype('|U2') # 使用unicode编码,每个元素长度为2
# 输出array(['2', '4', '6', '8'], dtype='<U2')
3.数值型dtype的命名方式:一个类型名(比如int、float),后面接着一个用于表示各元素位长的数字
比如表中的双精度浮点值,即Python中的float对象,需要占用8个字节(即64位),因此该类型在NumPy中就记为float64
4.每种类型有一个相对应的类型代码,即简写方式,参照下面的表



改变ndarray的形状
1. 直接修改ndarray的shape值
2. 使用reshape函数,可以创建一个改变了尺寸的新数组,原数组的shape保持不变,但注意他们共享内存空间,
因此修改任何一个也对另一个产生影响,因此注意新数组的元素个数必须与原数组一样
arr=np.arange(20)
arr.reshape((4,5))
# 输出array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
reshape函数不会改变原来的ndarray,但是得到的新的ndarray是原数组的视图
视图
多个变量使用(指向)一个内存地址(空间)
对于ndarray的一些方法操作,首先区分是否会改变原变量,以此来判断是视图还是副本
副本
把原来的内容,重新复制(拷贝)了一份新的数据,放到新的内存地址(空间)
即使修改了其中一个变量的元素值,并不会影响另外一个变量
3. 当指定新数组某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度
arr2=arr.reshape((2,-1))
# array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
NumPy基本操作
- 数组与标量、数组之间的运算
- 数组的矩阵积(matrix product)
- 数组的索引与切片
- 数组转置与轴对换
- 通用函数:快速的元素级数组函数
- 聚合函数
- np.where函数
- np.unique函数
数组与标量、数组之间的运算
- 数组不用循环即可对每个元素执行批量运算,这通常就叫做矢量化,即用数组表达式代替循环的做法
- 矢量化数组运算性能要比纯Python方式快上一两个数量级
- 大小相等的数组之间的任何算数运算都会将运算应用到元素级
元素级运算
- 像上面例子展现出来的,加、减、乘、除、幂运算等,可以用于数组与标量、大小相等数组之间
- 在NumPy中,大小相等的数组之间运算,为元素级运算,即只用于位置相同的元素之间,所得到的运算结果组成一个新的数组,运算结果的位置跟操作数位置相同
arr1=np.random.random((2,3))
arr2=np.arange(1,7).reshape(2,3) #arr2必须转换为2行3列才能和arr1进行加、减、
乘、除、幂运算
数组的矩阵积(matrix product)
1. 两个二维矩阵(多维数组即矩阵)满足第一个矩阵的列数与第二个矩阵的行数相同,那么可以进行矩阵乘法,即矩阵积不是元素级的运算
因为矩阵积是第一个矩阵的行与第二个矩阵的列相乘
f
a,b,c . g = a*f+b*g+c*h
(行) h
(列)
注意:矩阵积:第一个矩阵的列轴(水平的轴)要等于第二个矩阵的行轴(垂直的轴)
- 两个矩阵相乘结果所得到的数组中每个元素为,第一个矩阵中与该元素行号相同的元素与第二个矩阵中与该元素列号相同的元素,两两相乘后求和
ndarray笔记的更多相关文章
- ndarray笔记续
数组的索引与切片 多维数组的索引 import numpy as np arr=np.arange(1,25).reshape(2,3,4) arr # 输出 array([[[ 1, 2, 3, 4 ...
- python开发笔记-ndarray方法属性详解
Python中的数组ndarray是什么? 1.NumPy中基本的数据结构 2.所有元素是同一种类型 3.别名是array 4.利于节省内存和提高CPU计算时间 5.有丰富的函数 ndarray的创建 ...
- 读书笔记二、ndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息: import numpy as np arr1=np.array([1,2,3],dtype=np ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy Ndarray 对象
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引. ndarray 对象是用于存放同类型元素的多维数组. ndarr ...
- NumPy笔记-ndarray
ndarray,N维数组对象(矩阵) 所有元素必须是相同类型 ndim属性,维度个数 shape属性,各维度大小 dtype属性,数据类型 创建ndarray np.array(collection) ...
- Theano 学习笔记(一)
Theano 学习笔记(一) theano 为什么要定义共享变量? 定义共享变量的原因在于GPU的使用,如果不定义共享的话,那么当GPU调用这些变量时,遇到一次就要调用一次,这样就会花费大量时间在数据 ...
- MXNet设计笔记之:深度学习的编程模式比较
市面上流行着各式各样的深度学习库,它们风格各异.那么这些函数库的风格在系统优化和用户体验方面又有哪些优势和缺陷呢?本文旨在于比较它们在编程模式方面的差异,讨论这些模式的基本优劣势,以及我们从中可以学到 ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- python数据分析入门学习笔记
学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...
随机推荐
- python3编程基础之一:程序结构
程序从程序入口进入,到程序执行结束,大体是按照顺序结构执行语句.函数或代码块,掌握程序的结构,有利于把握程序的主体框架. 1.顺序结构--最常见的结构 顺序结构的程序设计是最简单的,只要按照解决问题的 ...
- [WEB安全]给BurpSuite设置非本地的网络代理
目录 0x01 一般情况 0x02 移动端流量抓取 0x03 多重代理的情形 0x04 参考链接 在Web渗透测试过程中,BurpSuite是不可或缺的神器之一. BurpSuite的核心是代理Pro ...
- meshing-圆锥网格划分
原视频下载地址: https://pan.baidu.com/s/1boSjGXh 密码: 9zis
- 常用的etl工具比较
ETL是什么? ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.(数 ...
- 小福bbs—项目系统设计与数据库设计
这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 实现对校园论坛软件的制作,使其能够发布帖子,查看信息等 作业的正文 小福bbs--项目需求分析 ...
- qt mvc1
mvc是经典的三层结构,将数据,视图和逻辑分离.Qt中的Model/View框架,实现了这个模式.在Qt中这个模式设计到三个类,model类,view类和delegate类.model类保存数据,vi ...
- 基于golang的websocket通信实现
代码: https://gitee.com/knox_xzk/websocket
- 3dmax联机分布式渲染方法技巧详解
3dmax联机分布式渲染方法技巧详解 \测试环境:win7系统 3DMAX2009 Vray2.0 .首先要保证你的两台电脑能在局域网里互相访问如图: 其他电脑上也一样都能打开对方的电脑! 步! ...
- Qt编写自定义控件54-时钟仪表盘
一.前言 这个控件没有太多的应用场景,主要就是练手,论美观的话比不上之前发过的一个图片时钟控件,所以此控件也是作为一个基础的绘制demo出现在Qt源码中,我们可以在Qt的安装目录下找到一个时钟控件的绘 ...
- .Net Core 3.0 关于Windows Form和WPF的全面支持
引言 ".NET 核心是开源和跨平台.您可以使用 .NET Core 在 Windows.Mac.十几个 Linux.iPhone.IoT 设备等上运行服务器应用程序! .NET 酷睿是开源 ...