numpy的基本操作上

1. 数组的构造

通过array构造

np.array([1, 2, 3])

等差序列np.linspace()或np.arrange()

np.linspace,取头和尾,中间均匀取点

np.linspace(start=0, stop=8, num=5) # 起始、终止(包含)、样本个数
#输出:array([0., 2., 4., 6., 8.])
x=np.linspace(6,18,7)
#输出:[ 6.          7.71428571  9.42857143 11.14285714 12.85714286 14.57142857
 16.28571429 18.        ]

np.arange()

np.arange(start=0, stop=8.1, step=2) # 起始、终止(不包含)、步长(不写的话默认是1)
#输出:array([0., 2., 4., 6., 8.])

import numpy as np
import torch
x=np.arange(6,18,3)
y=torch.arange(6,18,3)
z=type(x)
s=type(y)
print(x)
print(y)
print(z)
print(s)

zeros(0矩阵),eye(单位矩阵),full(批量填充)

#np.zeros()和np.ones同理,如果传其他的数字的话,可以用np.full
x=np.zeros((3,4),int)#(3,4)是输出的维度,int代表输出的类型
y=np.full((3,5),10)#代表填充全为10的3*5的矩阵


np.eye(3)
#输出一个3*3的单位矩阵
np.eye(3, k=-1) # 偏移主对角线1个单位的伪单位矩阵,K=1表示向上偏移,-1表示向下偏移

随机矩阵:np.random

rand:0-1随机均匀分布

np.random.rand(3) # 生成服从0-1均匀分布的三个随机数
np.random.rand(3, 3) # 注意这里传入的不是元组,每个维度大小分开输入

服从区间a到b上的均匀分布

np.random.uniform(5, 15, 3)#生成三个5-15的均匀分布的数
array([ 5.63812531,  5.95920446, 13.87864676])

randn:N(0,I)的标准正态分布

np.random.randn(3)
np.random.randn(2, 2)

normal:生成方差为 𝜎2 均值为 𝜇 的一元正态分布

np.random.normal(3, 2.5, 3)#均值为3,方差为2.5的三个数

randint:指定生成随机整数的最小值最大值(不包含)

np.random.randint(low, high, size)#比如np.random.randint(3,6,(3,4))

choice

可以从给定的列表中,以一定概率和方式抽取结果,当不指定概率时为均匀采样,默认抽取方式为有放回抽样

my_list = ['a', 'b', 'c', 'd']
# replace:True表示有放回抽样,False表示不放回抽样,默认为True
np.random.choice(my_list, 2, replace=False, p=[0.1, 0.7, 0.1 ,0.1])
#输出:array(['b', 'd'], dtype='<U1')
np.random.choice(my_list, (5,5), p=[0.1, 0.7, 0.1 ,0.1])#抽5*5个


permutation函数

当返回的元素个数与原列表相同时,不放回抽样等价于使用permutation函数,即打散原列表

my_list = ['a', 'b', 'c', 'd']
np.random.permutation(my_list)
#输出:array(['c', 'd', 'a', 'b'], dtype='<U1')

随机种子

它能够固定随机数的输出结果

np.random.seed(0) 
np.random.rand()

import numpy as np
import torch
np.random.seed(3)
x=np.random.randint(3,9,3)
print(x)
#如果第一次运行为[3,8,3],那么不管运行多少次,这个随机数都一直是[3,8,3]

2. np数组的变形与合并

转置:.T

np.zeros((2,3)).T#相当于把矩阵转置

合并操作:r_, c_

对于二维数组而言,r_和c_分别表示上下合并和左右合并,上下合并要求列数相同,左右合并要求行数相同

np.r_[np.zeros((2, 3)),np.ones((1, 3))]
# 左右合并 
np.c_[np.zeros((2,3)),np.ones((2,4))]

# 一维数组和二维数组合并时,将一维数组看做列向量,只能够使用左右合并 np.c_[np.zeros(2),np.ones((2,4))]

3. np数组的切片与索引

数组的切片模式支持使用slice类型的start:end:step切片,还可以直接传入列表指定某个维度的索引进行切片

一维数组

target = np.arange(0, 9) # 左闭右开 target
#输出:array([0, 1, 2, 3, 4, 5, 6, 7, 8])
target[-1]# 取最后一个元素 ,输出8
# 取从第2个元素到倒数第一个元素(从0开始,左闭右开,最后一个不取) 
target[2:-1]
#输出:array([2, 3, 4, 5, 6, 7])
# 取从后向前(相反)的元素 
target[::-1]
#输出:array([8, 7, 6, 5, 4, 3, 2, 1, 0])
# 取偶数位的元素 
target[::2]
#输出:array([0, 2, 4, 6, 8])
# 取奇数位的元素
target[1::2]
#输出:array([1,3,5,7])

二维数组

target = np.arange(9).reshape(3,3) 
target

#取第0维第0个到最后一个(左闭右开,最后一个不取),取第一维的第0个和第2个
target[:-1, [0,2]] 

np.ix

还可以利用np.ix_在对应的维度上使用布尔索引,但此时不能使用slice切片

# 对于第0维选择第0个和第2个,第1维选择第1个和第2个
target[np.ix_([True, False, True], [False, True, True])]


#当数组维度为1维时,可以直接进行布尔索引,而无需np.ix_
new = target.reshape(-1)
 new
 #输出:array([0, 1, 2, 3, 4, 5, 6, 7, 8])
 new%2==0
 #输出:array([ True, False,  True, False,  True, False,  True, False,  True])
 new[new%2==0]
 #输出:array([0, 2, 4, 6, 8])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值