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的更多相关文章

  1. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  2. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  3. Numpy之ndarray与matrix

    1. ndarray对象 ndarray是numpy中的一个N维数组对象,可以进行矢量算术运算,它是一个通用的同构数据多维容器,即其中的所有元素必须是相同类型的. 可以使用array函数创建数组,每个 ...

  4. 什么是Numpy的ndarray

    什么是Numpy的ndarray 首先,Numpy的核心是ndarray. 然后,ndarray本质是数组,其不同于一般的数组,或者Python 的list的地方在于它可以有N 维(dimention ...

  5. 查看numpy.ndarray的数据类型

    使用ndarray数据时,如果希望知道数据的类型和维数,可以按照以下方法: Xxx.dtype  #xxx表示一个ndarray类型的变量,返回ndarray的数据类型 Xxx.shape  #xxx ...

  6. NumPy学习_00 ndarray的创建

    1.使用array()函数创建数组 参数可以为:单层或嵌套列表:嵌套元组或元组列表:元组或列表组成的列表 # 导入numpy库 import numpy as np # 由单层列表创建 a = np. ...

  7. ndarray数据类型

    dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息 In [18]: sim1 = np.array([1,2,3],dtype=np.float64) ...

  8. 创建ndarray

    Numpy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器,是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的. 创建数组最简单的方法就 ...

  9. NumPy 超详细教程(3):ndarray 的内部机理及高级迭代

    系列文章地址 NumPy 最详细教程(1):NumPy 数组 NumPy 超详细教程(2):数据类型 NumPy 超详细教程(3):ndarray 的内部机理及高级迭代 ndarray 对象的内部机理 ...

  10. NumPy学习_01 ndarray相关概念

    1.NumPy库 NumPy = Numerical Python 是高性能科学计算和数据分析的基础库. pandas库充分借鉴了NumPy的相关概念,先行掌握NumPy库的用法,才能把pandas的 ...

随机推荐

  1. 3台服务器Redis高可用哨兵模式实现(转)

    http://www.linuxidc.com/Linux/2017-05/143521.htm

  2. 为什么要使用MONO

    今天中午我收到一个Email,是关于以前写的一个MONO文章的疑问,我对此做了一些解释,希望与有相同问题的朋友一起分享一下,邮件内容如下: 我在网上找到了您写的一篇关于Mono的“在windows下使 ...

  3. 360 杀毒几K每秒的IO读取,SO MAD

    在没有用360杀毒扫描的状态下,从任务管理器中查看,居然有几K每秒的IO读取 . 好卡,直接卸载.

  4. TX Textcontrol 使用总结一模板

    以下内容纯属个人使用感想,如有问题,还望讲解!!! 简介与使用感想: TX Text Control是一套功能丰富的文字处理控件,它以可重复使用控件的形式为开发人员提供了Word中常用的文字处理功能, ...

  5. bzoj1941 Hide and Seek

    Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...

  6. shelve的简单使用

    shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表.字典.或者用户自定义的类实例保存到she ...

  7. 术语-软件-软件开发:SDK(软件开发工具包)

    ylbtech-术语-软件-软件开发:SDK(软件开发工具包) 软件开发工具包(缩写:SDK.外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包.软件框架 ...

  8. 术语-服务:BaaS

    ylbtech-术语-服务:BaaS BaaS(后端即服务:Backend as a Service)公司为移动应用开发者提供整合云后端的边界服务. 1.返回顶部 1. 中文名:后端即服务 外文名:B ...

  9. Linux命令详解-ftp服务器配置

    1.ftp服务器配置 1.ftp安装: rpm –qa | grep ftp 2.查看安装内容: rpm-ql |more 3.启动ftp服务: service vsftpd start 4.配置文件 ...

  10. 最强数据集50个最佳机器学习公共数据,可以帮你验证idea!

    1.  寻找数据集の奥义 根据CMU的说法,寻找一个好用的数据集需要注意一下几点: 数据集不混乱,否则要花费大量时间来清理数据. 数据集不应包含太多行或列,否则会难以使用. 数据越干净越好,清理大型数 ...