ndarray
ndarray
ndarray-多维数组对象
- ndarray数组分两部分
- 实际数据
- 描述数据的元数据(数据类型/维度等)
ndarray所有元素类型相同,下标从0开始
import numpy as np a = np.array([0,1,2,3,4])
b = np.array([[0,1,2,3,4],[9,8,7,6,5]]) a
type(a)
a[0], a[1], a[2]
a[0] = 5
a
ndarray基本概念
- 特征:能描述物体的最小粒度
- 维度(维数):描述一个对象所需的特征(参数)层数
- 轴:axis,特征数量
- 秩:rank,轴的个数,或数据维数(层数)
import numpy as np a = np.array([1,2,3])
b = np.array([[1,0],[0,1],[1,2]])
c = np.array([[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]]]) a
a.shape #轴
a.ndim #秩
ndarray对象属性
- .ndim,秩
- .shape,轴,对象尺度,对于矩阵,n行m列
- .size,对象元素的个数,相当于.shape中的n*m的值
- .dtype,对象的元素类型
- .itemsize,对象中每个元素的大小,单位字节
import numpy as np a = np.array([[0,1,2,3,4],[9,8,7,6,5]])
# b = np.array([[0,1,2,3,4],[9,8,7,6]]) # 非同质ndarray元素为对象类型,对象类型无法发挥Numpy的性能优势,一般不用 a
a.ndim
a.shape
a.size
a.dtype
a.itemsize
ndarray-数组创建和变换
创建ndarray数组
1:从Python的列表/元组等类型创建数组
x = np.array(list/tuple)
创建数组指定默认数据类型,也可以自行指定
x = np.array(list/tuple,dtype=np.int)
不写int32/float64之类,程序会自动调节int/float类型
import numpy as mp x = np.array([1,2,3,4])
y = np.array([[1,2],(0.1,0.2)])
z = np.array([[1,2],(0.1,0.2)], dtype=np.int) z
2 使用Numpy函数创建特定数组
- np.arange(n),类似range()函数(递增的整数序列),返回ndarray类型,元素从0到n-1
- np.ones(shape),根据shape生成一个全1数组,shape是元组类型
- np.zeros(shape),根据shape生成一个全0数组,shape是元组类型
- np.full(shape,val),根据shape生成一个数组,每个元素都是val
- np.eye(n),创建一个正方的n*n单位矩阵,对角线为1,其余为0
numpy生成的数组,如不指定类型几乎全为浮点型(arange除外,它是整型)。因为科学计算中测量值,例如温度、长度,都是浮点数
例子:
import numpy as mp np.arange(10)
np.ones((3,6))
np.zeros((3,6),dtype=np.int32)
np.full(6,3)
np.full((2,3,4),25)
np.eye(5) # 生成多维数组
x = np.ones((2,3,4)) x
x.shape
其他Numpy函数,用于大规模科学计算
np.concatenate()
将两个或多个数组合并成一个新数组np.ones_like(a)
根据数组a的形状生成一个全1数组np.zeros_like(a)
根据数组a的形状生成一个全0数组np.full_like(a,val)
根据数组a的形状生成一个全 val 数组np.linspace()
根据起止数据等间距填充数据形成数组
np.concatenate((a1,a2,...), axis=0)
,ndarray数组拼接
import numpy as mp a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[10,11,12]]) np.concatenate((a,b),axis=0) #按行拼接
np.concatenate((a,b.T),axis=1) # 按列拼接
import numpy as mp a = np.linspace(1,10,4)
a b = np.linspace(1,10,4,endpoint = False) #endpotin表示终止元素是否是n个生成元素中的一个
b
变换ndarray数组
维度变换
- .reshape(shape):不改变数组元素,返回一个shape形状的数组,原数组不变
- .resize(shape):与.reshape()功能相同,但修改原数组
- .flatten():对数组降维,返回折叠后的一维数组,原数组不变
import numpy as mp a = np.ones((2,3,4),dtype=np.int32) #a.reshape((3,8))
#a.resize((3,8))
a #a.flatten() #无变化
a
b = a.flatten() #变化
b
类型变换
new_a = a.astype(new_type)
,astype会生成一个新数组
import numpy as mp a = np.ones((2,3,4),dtype=np.int) #不写int32之类,程序会自动调节int类型
a
a.dtype b = a.astype(np.float)
b
b.dtype
ndarray转为list
.tolist()
:ndarray转为Python列表,用于和Python原生结合编写程序
import numpy as mp a = np.full((2,3,4),25,dtype=np.int32)
a a.tolist()
ndarray数组去重
np.unique(a)
,去除重复数组值
import numpy as mp a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
np.unique(a)
ndarray-数组操作(增查改删)
查,Read
- 索引:获取数组中特定位置的元素
- 切片:获取数组中特定元素的子集
一维数组的索引和切片
与Python list列表类似
import numpy as mp a = np.array([9,8,7,6,5]) a[2] #索引
a[1:4:2] #切片,三个值为: 起始编号,终止编号(不含),步长(变化量),参数用冒号分隔
多维数组的索引和切片
import numpy as mp a = np.arange(24).reshape((2,3,4))
a #多维数组的索引,两种方式,ndarray方式和Python list方式
a[1,2,3] # a[1][2][3]
a[-1,-2,-3] # a[-1][-2][-3] #倒数第一个,倒数第二个... # 多维数组的切片
a[:,1,-3]
a[:,1:3,:] #不关心第一维度,第二维度 1到3不含3,第三维度不关心
a[:,:,::2] #第一/第二维度不关心,第三参数 每个维度可以使用步长跳跃切片(不关心起始结束但要以2为步长获取值)
返回指定条件元素所在位置索引
import numpy as mp a = np.array([[1,2,3,4],[5,4,7,8]])
b = np.array([[[1,2,3,4],[5,4,7,8]],[[1,4,3,2],[5,2,1,8]]]) np.where(a > 4) #索引坐标 纵向排列
np.where(b == 4)
增,Create
import numpy as mp a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[10,11,12]])
改,Update
import numpy as mp a = np.array([[1,2,3],[4,5,6]])
a a[0][1] = 10 a[:,0:2] = 1 # 切片批量修改
a[:,0:2] = [[11,12],[13,14]]
删,Delete
np.delete(arr, obj, axis=None)
并没有真删除,只是返回了一个去掉删除项的新数组
import numpy as mp a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
a #删除行
b1 = np.delete(a, -1, axis=0)
#删除列
b2 = np.delete(a, -1, axis=1)
#删除多列
b3 = np.delete(a, [1,2], axis=1)
ndarray-数组运算
数组与标量运算
- 标量:一个数值
- 广播机制:自动补齐,数组与标量之间的运算作用于数组的每一个元素
import numpy as np # 计算a与元素平均值的商
a = np.arange(24).reshape((2,3,4))
a
a.mean() # a中所有元素的算数平均值
a = a/a.mean()
a
Numpy一元函数
了解即可,运算时注意原数组是否被改变,几乎所有一元函数都是生成新数组
对ndarray中的数据执行元素级运算的函数
- np.abs(x) np.fabs(x) 计算数组各元素的绝对值
- np.sqrt(x) 计算数组各元素的平方根
- np.square(x) 计算数组各元素的平方
- np.log(x) np.log10(x) np.log2(x) 计算数组各元素的自然对数/10底对数和2底对数
- np.ceil(x) np.floor(x) 计算数组各元素的ceiling值(不超过元素的整数值)或floor值(小于这个元素的最大整数值)
- np.rint(x) 计算数组各元素的四舍五入值
- np.modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回
- 计算数组各元素的普通型和双曲型三角函数
- np.cos(x) np.cosh(x)
- np.sin(x) np.sinh(x)
- np.tan(x) np.tanh(x)
- np.exp(x) 计算数组各元素的指数值
- np.sign(x) 计算数组各元素的符号值,1(+),0,-1(-) 正数为1负数为-1其他(0时)为0
import numpy as np a = np.arange(24).reshape(2,3,4)
np.square(a) a = np.sqrt(a)
a np.modf(a)
ndarray的更多相关文章
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- Numpy之ndarray与matrix
1. ndarray对象 ndarray是numpy中的一个N维数组对象,可以进行矢量算术运算,它是一个通用的同构数据多维容器,即其中的所有元素必须是相同类型的. 可以使用array函数创建数组,每个 ...
- 什么是Numpy的ndarray
什么是Numpy的ndarray 首先,Numpy的核心是ndarray. 然后,ndarray本质是数组,其不同于一般的数组,或者Python 的list的地方在于它可以有N 维(dimention ...
- 查看numpy.ndarray的数据类型
使用ndarray数据时,如果希望知道数据的类型和维数,可以按照以下方法: Xxx.dtype #xxx表示一个ndarray类型的变量,返回ndarray的数据类型 Xxx.shape #xxx ...
- NumPy学习_00 ndarray的创建
1.使用array()函数创建数组 参数可以为:单层或嵌套列表:嵌套元组或元组列表:元组或列表组成的列表 # 导入numpy库 import numpy as np # 由单层列表创建 a = np. ...
- ndarray数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息 In [18]: sim1 = np.array([1,2,3],dtype=np.float64) ...
- 创建ndarray
Numpy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器,是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的. 创建数组最简单的方法就 ...
- NumPy 超详细教程(3):ndarray 的内部机理及高级迭代
系列文章地址 NumPy 最详细教程(1):NumPy 数组 NumPy 超详细教程(2):数据类型 NumPy 超详细教程(3):ndarray 的内部机理及高级迭代 ndarray 对象的内部机理 ...
- NumPy学习_01 ndarray相关概念
1.NumPy库 NumPy = Numerical Python 是高性能科学计算和数据分析的基础库. pandas库充分借鉴了NumPy的相关概念,先行掌握NumPy库的用法,才能把pandas的 ...
随机推荐
- 打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
If you installed CRM 4.0 on box where you also have SQL and used a domain account as service account ...
- Mac 下安装python3.7 + pip 利用 chrome + chromedriver + selenium 自动打开网页并自动点击访问指定页面
1.安装python3.7https://www.python.org/downloads/release/python-370/选择了这个版本,直接默认下一步 2.安装pipcurl https:/ ...
- shell 前台进程组的选择
控制命令如ctrl+c,ctrl+d等命令是会kill到前台进程组的,这个过程和bash进程还有tty驱动有关系. 在终端执行命令,在bash进程看来都是在执行job,然后fork出子进程来执行这些j ...
- Sublime Text 3 最新可用注册码(免破解)
12年的时候分享过Sublime Text 2的注册码和破解方法.4年后容我更新一下Sublime Text 3的注册码.. 最好还是购买正版主持版权.:D. 以下两枚注册码用最新的Sublime T ...
- 【spring框架】spring获取webapplicationcontext,applicationcontext几种方法详解--(转)
方法一:在初始化时保存ApplicationContext对象代码:ApplicationContext ac = new FileSystemXmlApplicationContext(" ...
- charles只获取指定的请求的设置方法
过滤网络请求 通常情况下,需要对网络请求进行过滤,只监控指定服务器的请求.有3种办法: 方法一:在主界面的中部的 Filter 栏中输入需要过滤出来的关键字.例如我们的服务器的地址(host)是:ww ...
- HUD 1175 连连看
连连看 Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submiss ...
- ubuntu solute two different terminals cmd
sudo update-alternatives --config x-terminal-emulator select 1. gnome-xterminal
- Northwestern European Regional Contest 2017-I题- Installing Apps题解
一.题意 有一个手机,容量为$C$,网上有$N$个app,每个app有个安装包大小$d_i$,有个安装后的占用空间大小$s_i$,安装app是瞬间完成的,即app的占用空间可以瞬间由$d_i$变成$s ...
- idea-activate code
N757JE0KCT-eyJsaWNlbnNlSWQiOiJONzU3SkUwS0NUIiwibGljZW5zZWVOYW1lIjoid3UgYW5qdW4iLCJhc3NpZ25lZU5hbWUiO ...