[Python入门] Numpy学习笔记(未完结)

Numpy基础

Python本身含有列表(list)和数组(array),但对于大数据来说,这些结构是有很多不足的。
list的元素可以是任何对象,因此列表中所保存的是对象的指针。
array对象可以直接保存数值,但是由于它不支持多维,在上面的函数也不多,因此也不适合做数值运算。
Numpy提供了两种基本的对象:

  • ndarray(N-dimensional Array Object)
  • ufunc(Universal Function Object)
    ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

Numpy的主要特点:

  • ndarray,快速节省空间的多维数组,提供数组化的算术运算和高级的广播功能。
  • 使用标准数学函数对整个数组的数据进行快速运算,且不需要编写循环。
  • 读取/写入磁盘上的阵列数据和操作存储器映像文件的工具。
  • 线性代数、随机数生成和傅里叶变换的能力。

Numpy主要内容:

  • 如何生成Numpy数组。
  • 如何存取元素。
  • Numpy的算术运算。
  • 数组变形。
  • 批量处理。
  • Numpy的通用函数。
  • Numpy的广播机制。

生成Numpy数组

  • 从已有数据中创建数组:
    直接对Python的基础数据类型(如列表、元组等)进行转换来生成ndarray:

1)将列表转换成ndarray:

import numpy as np
list1 = [2, 3, 4, 5]
nd1 = np.array(list1)

2)嵌套列表可以转换成多维ndarray:

import numpy as np
list2 = [[2, 3, 4, 5], [6, 7, 8, 9]]
nd2 = np.array(list2)

把上面示例中的列表换成元组也同样适用。

  • 利用random模块生成数组
    np.random 模块常用函数:
函数 描述
np.random.random 0到1之间随机数
np.random.uniform 均匀分布的随机数
np.random.randn 标准正态分布的随机数
np.random.normal 正态分布
np.random.randint 随机整数
np.random.shuffle 随机打乱顺序
np.random.seed 设置随机数种子
random_sample 生成随机的浮点数
  • 创建特定形状的多维数组
    参数初始化时,有时需要生成一些特殊矩阵,如全是0或1的数组或矩阵,这时我们可以利用np.zeros、np.ones、np.diag来实现。
函数 描述
np.zeros((3,4)) 创建3 x 4的元素全为0的数组
np.ones((3,4)) 创建3 x 4的元素全为1的数组
np.empty((2,3)) 创建2 x 3的空数组,但是空数据中的值不是0,是未初始化的垃圾值
np.zeros_like(ndarr) 以ndarr 相同维度创建元素全为0数组
np.ones_like(ndarr) 以ndarr 相同维度创建元素全为1数组
np.empty_like(ndarr) 以ndarr 相同维度创建空数组
np.eye(5) 创建一个5 x 5矩阵,对角线为1,其余为0
np.full((3,5), 666) 创建3 x 5的元素全为666的数组

将数据保存起来,再读取:

nd = np.random.random([5, 5])
np.savetxt(X = nd, fname = './test.txt')
nd1 = np.loadtxt('./test.txt')
  • 利用arange、linspace函数生成数组
# arange([start,] stop[, step,], dtype=None)
print(np.arange(1, 4, 0.5))
# [1. 1.5 2. 2.5 3. 3.5]

start, stop指定范围; stop设定步长。start默认为0, step可以使小数。

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

linspace根据输入的指定数据范围和等份数量,自动生成一个线性等分向量。
如果retstep=True,会返回带步长的ndarray。
linspace必定会包含数据起点和重点。

获取元素

  • 通过指定索引标签
np.random.seed(2020)
nd = np.random.random([10])
nd[3]
nd[3:6]
nd[1:6:2] # 截取固定间隔数据
nd[::-2] # 倒序取数
# 截取一个多维数组的一个区域内数据
nd2 = np.arange(25).reshape([5,5])
nd2[1:3,1:3]
# 截取一个多维数组中,数值在一个值域之内的数据
nd2[(nd2>3)&(nd2<10)]
# 截取多维数组中指定的行,如2,3行
nd2[[1,2]] # nd2[1:3,:]
# 截取多为数组中指定的列
nd2[:,1:3]
  • 通过函数,如random.choice从指定样本中随机抽取数据。
from numpy import random as nr
a = np.arange(1,25,dtype=float)
# 随机可重复抽取
c1 = nr.choice(a, size=(3,4))
# 随机不重复抽取
c2 = nr.choice(a, size=(3,4),replace=False) #replace默认为True,可重复抽取
#随机按制度概率抽取
c3 = nr.choice(a, size=(3,4), p=a/np.sum(a))
发布了55 篇原创文章 · 获赞 63 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/m0_38068229/article/details/105718897
今日推荐