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进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...
随机推荐
- 【转载】Hadoop集群各部分常用端口号
hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...
- SQL按照顺序时间段统计
借助master..spt_values表 按照时间(半小时)划分统计时间段: select ,dateInfo.dday) as time) StartTime, ,),dateInfo.dday) ...
- Mininet系列实验(一):Mininet使用源码安装
1 实验目的 掌握Mininet使用源码安装的方法. 2 实验原理 Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行相关的内核系统 ...
- golang gin解决跨域访问
package middleware import ( "github.com/gin-gonic/gin" "net/http") func Cors() g ...
- python笔记8 socket(TCP) subprocess模块 粘包现象 struct模块 基于UDP的套接字协议
socket 基于tcp协议socket 服务端 import socket phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 买 ...
- keras多层感知机MLP
肯定有人要说什么多层感知机,不就是几个隐藏层连接在一起的吗.话是这么说,但是我觉得我们首先要自己承认自己高级,不然怎么去说服(hu nong)别人呢 from keras.models import ...
- plupload上传大文件
大容量文件上传早已不是什么新鲜问题,在.net 2.0时代,HTML5也还没有问世,要实现这样的功能,要么是改web.config,要么是用flash,要么是用一些第三方控件,然而这些解决问题的方法要 ...
- jQuery学习四——效果
1.显示,隐藏: <!DOCTYPE html> <html> <head> <title>jquery事件</title> </he ...
- Fakes里的stub和shim的区别
stub常用于虚拟接口.类.方法,无法重写静态方法(stub需要传递到具体调用代码中) shim常用于重写静态方法(在ShimsContext.Create()作用域内,拦截Runtime动态修改方法 ...
- 获取radio点击事件
获取radio点击事件,不能用click(),而是用change(). $('input[name="options"]').change(function(){ console. ...