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. Angular 4 组件的生命周期

    1.组件的生命周期

  2. golang panic的捕获

    panic发生时, 会导致进程挂掉.为了处理panic, 可以使用recover捕获,然后处理. 下面以下标引用越界问题为例进行说明. 正常情况下,代码中如果出现下标越界,会直接触发panic, 导致 ...

  3. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文

    近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...

  4. Hibernate对substring和cast的支持问题

    http://blog.sina.com.cn/s/blog_8acd9e4b0102uwev.html Hibernate对substring和cast的支持问题 问题:要比较日期的范围...这是只 ...

  5. Mac网络连接问题

    场景:同一个网络,其他电脑和手机可以访问远程网络端口为443的网站,如博客园,唯独我的电脑不能访问 解决方法:查看路由器的子网掩码和DNS地址,将IP设置为手动,输入ip.子网掩码和DNS即可

  6. 1012 The Best Rank (25 分)

    1012 The Best Rank (25 分) To evaluate the performance of our first year CS majored students, we cons ...

  7. Unreal Engine 4 性能优化工具(Profiler Tool)

    转自:http://aigo.iteye.com/blog/2296548 Profiler Tool Reference https://docs.unrealengine.com/latest/I ...

  8. KuDu论文解读

    kudu是cloudera在2012开始秘密研发的一款介于hdfs和hbase之间的高速分布式存储数据库.兼具了hbase的实时性.hdfs的高吞吐,以及传统数据库的sql支持.作为一款实时.离线之间 ...

  9. 给iOS开发新手送点福利,简述UIPikerView的属性和用法

    1.   numberOfComponents:返回UIPickerView当前的列数 NSInteger num = _pickerView.numberOfComponents; NSLog( @ ...

  10. centos6性能监控软件

    常用软件在此下载 http://rpm.pbone.net/ http://pkgs.org/ collectl 显示cpu\disk\network的实时信息http://dl.fedoraproj ...