文章目录
- 属性
- 选择(choice)
- 索引切片
-
- 数据的保存与读取
- 数组合并与拆解
- 数组变形
属性
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
代码 | 含义 |
---|
a.ndim | 维度 |
a.shape | 每个维度大小 |
a.size | 总大小 |
a.dtype | 数据类型 |
a.itemsize | 每个元素字节大小 |
a.nbytes | 数组总字节大小 |
选择(choice)
a = np.arange(1, 25) #获取排序为1到24数字
代码 | 含义 |
---|
np.random.choice(a, size=(3, 4)) | 从a中随机取出12个数字(形状为3*4),可重复获取 |
np.random.choice(a, size=(3, 4),replace=True) | 从a中随机取出12个数字(形状为3*4),可重复获取 |
np.random.choice(a, size=(3, 4),replace=False) | 从a中随机取出12个数字(形状为3*4),不可重复获取 |
索引切片
| 代码 | 含义 |
---|
一维索引 | nd = np.random.randint(0, 10, 10) | 创建10个在[0,10)之间的随机数 |
| nd[1] | 获取第二个数字 |
| nd[-1] | 获取倒数第一个数字 |
| nd[2:8] | 获取第三至第八个数字 |
| nd[:5] | 获取第一至第五个数字 |
| nd[3:] | 获取第四至最后一个数字 |
| nd[1:8:2] | 获取第二至第八且间距为2的数字 |
| nd[::2] | 获取所有数据且间距为二 |
二维索引 | nd = np.random.randint(0, 10, (5, 5)) | 创建形状为(5,5)且元素在[0,10)之间的随机数 |
| nd[(nd>3)&(nd<8)] | 获取大于3小于8的数 |
| nd[3][2] | 获取第四行第三个 |
| nd[3, 2] | 同上 |
| nd[1] | 获取第二行 |
| nd[1:4] | 获取二至四行 |
| nd[1:4:2] | 获取二至四行且间隔为2,即第二、第四行 |
| nd[:, 1] | 获取第二列 |
| nd[:, 1:4] | 获取二至四列 |
| nd[:, 1:4:2] | 获取二至四列且间隔为2,即第二、第四列 |
| nd[1:3, 2:4] | 获取二至三行且三至四列 |
花哨索引
a = np.array([1,2,3,4,5,6])
print([a[1],a[3]]) #[2, 4]
print(a[[3,2,1]]) #[4 3 2]
b = np.array([[1,3],[2,4]])
print(a[b]) #[[2 4] [3 5]]
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([0,1,2])
c = np.array([2,0,1])
print(a[b,c]) #[3 4 8] 2,0 1,0 2,1位置的值
# 遵循广播
print(a[b[:,np.newaxis],c]) #[[3 1 2] [6 4 5] [9 7 8]]
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a[2,[2,0,1]]) # [9 7 8]
print(a[1:,[2,0,1]]) # [[6 4 5] [9 7 8]]
row = np.array([0,1,2])
c= np.array([1,0,1],dtype=bool)
print(a[row[:,np.newaxis],c]) # [[1 3] [4 6] [7 9]] 获取0 2列
数据的保存与读取
代码 | 含义 |
---|
np.savetxt(X=nd1, fname=‘./test1.txt’) | 保存数据,文件名为test1.txt |
nd2 = np.loadtxt(‘./test1.txt’) | 读取数据 |
数组合并与拆解
| 代码 | 含义 | |
---|
append :合并 | np.append(nd1,nd2) | 将nd1和nd2合并为一维,nd1在前,nd2在后 | 一维或多维 |
| np.append(nd1,nd2,axis=0) | 默认axis=0为nd2加在nd1下方,axis=1为nd2加在nd1右方 | |
concatenate :合并 | np.concatenate((nd1,nd2)) | nd1在前,nd2在后 | 一维 |
| np.concatenate((nd1,nd2)) | nd2加在nd1下方 | 二维 |
| np.concatenate((nd1,nd2),axis=0) | 默认axis=0为nd2加在nd1下方,axis=1为nd2加在nd1右方 | 二维 |
stack :合并 | np.stack((nd1,nd2),axis=2) | nd1,nd2都为二维(4,3),默认时axis=0合并后为三维(2,4,3)axis=1时为三维(4,2,3)axis=2时为三维(4,3,2) | |
| np.hstack((nd1, nd2)) | 行合并 | 一维或多维 |
| np.vstack((nd1, nd2)) | 列合并 | 一维或多维 |
| np.dstack((nd1, nd2)) | nd1,nd2都为二维(4,3),默认时axis=0合并后为三维(4,3,2) | |
split :分割 | np.split(a,(3,5)) | 3 5为索引 | 一维或多维 |
| np.vsplit(nd1, 4) | 横向拆分4份 | 多维 |
| np.vsplit(a,[1,2,3]) | 横向按索引号1,2,3分割 | 多维 |
| np.hsplit(nd1, 3) | 列向拆分为3份 | 一维或多维 |
| np.hsplit(a,[1,2,3]) | 列向拆分为3份 | 一维或多维 |
数组变形
代码 | 含义 |
---|
nd.reshape(2, 8) | 将nd转化为2*8(nd转化前后元素个数相同),nd没发生变化 |
nd.reshape(-1, 2) | 将nd转化为两列,2一定要能被nd元素个数整除 |
nd.reshape(2, -2) | 将nd转化为两行,2一定要能被nd元素个数整除 |
nd[np.newaxis,:] | 通过newaxis获取的行向量 |
nd[:,np.newaxis] | 通过newaxis获取的列向量 |
nd.resize(2, 8) | 将nd转化为2*8,且nd发生变化 |
nd.T | 转置,34变为43,nd没发生变化 |
nd.ravel(‘F’) | 按列展开成一维 |
nd.ravel() | 按行展开成一维 |
nd.flatten() | 将多维转一维 |
nd.squeeze | 降维,把矩阵中含1的维度去掉,如shape为(3,1)或(3,1,2,1),则降维后为(3,)或(3,2) |
nd.transpose(1, 0).shape | 如果nd为3维且nd.shape为(2,3,4),则nd.transpose(1,2,0).shape为(3,4,2),进行维度切换 |
评论列表(0条)