(一)Numpy数据类型及常用命令

基本介绍

NumPy(Numerical Python)

  • 快速高效的多维数组对象ndarray
  • 用于对数组执行 元素级计算 以及直接对数组执行 数学计算 的函数
  • 用于读写硬盘上基于数组的数据集的工具
  • 线性代数运算、傅里叶变换,以及随机数生成
  • 用于将C、C++、Fortran代码集成到Python的工具

对于数值型数据,NumPy数组在存储和处理数据时要比内置的Python数据结构高效得多。此外,由低级语言(比如C和Fortran)编写的库可以直接操作NumPy数组中的数据,无需进行任何数据复制工作。

一、Numpy数据类型

ndarray的创建和变换

  • ndarray创建
# 创建ndarray
np.array(d1) 
np.array([1,2,3], dtype = np.float64) 
np.asarray()  # 将输入转换为ndarray,如果本身是ndarray则不进行转换
np.arange(n)

np.ones(shape); np.ones_like(a)  # ones_like以另一个数组为参数,根据其形状和dtype创建一个全1数组
np.zeros(shape); np.zeros_like(a)  # zero_like以另一个数组为参数,根据其形状和dtype创建一个全0数组
np.empty(shape); np.empty_like(a) # 创建新数组,只分配内存空间但不填充任何值

np.full(shape, val); np.full_like(a, val)

np.eye(n); np.identity()  # 创建一个正方的NxN的单位矩阵,(对角线为1,其余为0)
  • 属性的转换
.ndim, .shape, .size, .dtype, .itemsize

.reshape(shape)
.resize(shape)
.swapaxes(ax1, ax2)
.flatten()
  • 将ndarray转换为列表
    列表 是 Python中 最基础的一种类型,运算速度是没有ndarray快的,但是有时候需要与原生的python程序结合,需要转换成list
arr.tolist()

基础数据类型

类型 类型代码 说明
int8, uint8 i1,u1 有符号和无符号的8位(1个字节)整型
int 16, uint16 i2, u2 有符号和无符号的16位(2个字节)整型
int32, uint32 i4,u4 有符号和无符号的32位(4个字节)整型
int64, uint64 i8, u8 有符号和无符号的64位(8个字节)整型
float16 f2 半精度浮点数
float32 f4或f 标准的单精度浮点数,与C的float兼容
float64 f8或d 标准的双精度浮点数,与C的double和Python的float对象兼容
float128 f16或g 扩展精度浮点数
complex64, complex128, complex256 c8、c16、c32 分别用32位、64位或128位浮点数表示的复数
bool 存储True和False值的布尔类型
object O Python对象类型
string_ S 固定长度的字符串类型(每个字符1个字节)。例如,哟啊创建一个长度为10的字符串,应使用S10
unicode_ U 固定长度的unicode类型(字节数由平台决定),跟字符串的定义方法一样(如U10)
  • 可以在创建numpy的时候显式地指定数据类型
arr1 = np.array([1,2,3], dtype=np.float64)
arr2 = np.array([1,2,3], dtype=np.int32)

arr1.dtype
arr2.dtype
  • 可以通过 ndarray 的 astype 方法,显式地 转换其 dtype
    使用astype一定会创建出一个新的数组(原数组的一个拷贝),即使新的dtype跟老的相同
arr2 = arr1.astype(np.float64) 
  • 或者可以用一个arr1的数据类型,去定义 另一个arr2
arr2.astype(arr1.dtype) ---> astype 会创建出一个新的数据(原始数据的一份拷贝) 

广播运算介绍 broadcasting

数组很重要,因为它使你不用编写循环即可对数据执行批量运算,这通常就叫作矢量化(vectorization)。

  • 一般来说,矢量化的方法要比纯Python方式快上一两个数量级。(尤其是各种数值计算)

  • 数据与标量、相同shape的数组之间的任何算数运算,都是元素级的运算

  • shape不同的数组之间的运算 叫广播(broadcasting)

数组的切片和索引

  • ndarray 的索引和切片

与列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到原数组上

由于NumPy的设计目的是处理大数据,所以你可以想象一下,如果NumPy坚持要将数据复制来复制去的话会产生何等的性能和内存问题。

如果你需要得到的是ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如arr[5:8].copy()

  • 对 嵌套数组 的 索引
arr2[0][2] 等价于 arr2[0, 2] 

在这里插入图片描述

  • 布尔型索引

布尔型数组的长度必须跟被索引的轴的长度一致。

布尔型索引的数组本身由判断产生,判断条件可以用&(和)、|(或)之类的布尔算数运算符。

通过布尔型索引选取数组中的数据,将总是创建数据副本,即使返回一模一样的数组也是如此。

data[name == 'Bob'] 
data[(name == 'Bob') | (name 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值