Numpy数组 *** 作

Numpy数组 *** 作,第1张

文章目录
  • 属性
  • 选择(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),进行维度切换

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/874712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存