python基础知识打卡第十六天——Numpy的基本使用

Numpy的基本使用

本部分参考链接 Numpy——通往人工智能的大门

1、Numpy的核心特征就是N-维数组对——ndarray

1.1、ndarray-创建

ndarray常用的创建方法如下表:

方法描述
array()将列表转换为数组,可选择显式指定dtype
arange()range的numpy版,支持浮点数
linspace()类似arange(),第三个参数为数组长度
zeros()根据指定形状和dtype创建全0数组
ones()根据指定形状和dtype创建全1数组
empty()根据指定形状和dtype创建空数组(随机值)
eye()根据指定边长和dtype创建单位矩阵

在这里插入图片描述

1.2、ndarray的常用属性

属性描述
T数组的转置(对高维数组而言)
dtype数组元素的数据类型
size数组元素的个数
ndim数组的维数
shape数组的维度大小(以元组形式)
itemsize每个项占用的字节数
nbytes数组中的所有数据消耗掉的字节数
# T:转置 转置是一种特殊的数据重组形式,可以返回底层数据的视图而不需要复制任何内容。
# 通俗点说,转置就是将数据旋转90度,行变成列,列变成行。

li1 = [
    [1,2,3],
    [4,5,6]
] 
a = np.array(li1)
a.T
执行结果:
array([[1, 4],
       [2, 5],
       [3, 6]])


# dtype:返回当前数据的数据类型
arr = np.arange(10)
arr.dtype
执行结果:
dtype('int32')

# size:返回当前数组内存在的元素个数
l1 = [[[1,2,3],
       [4,5,6]],
     [[7,8,9],
     [1,5,9]
     ]]
arr1 = np.array(l1)
arr1.size
执行结果:
12

# ndim:返回当前数组维度
l1 = [[[1,2,3],
       [4,5,6]],
     [[7,8,9],
     [1,5,9]
     ]]
arr1 = np.array(l1)
arr1.ndim
执行结果:
3

# shape:返回数组维度大小
l1 = [[[1,2,3,4],
       [4,5,6,5],
      [6,8,3,6]],
     [[7,8,9,7],
     [1,5,9,7],
      [4,6,8,4]
     ]]
arr1 = np.array(l1)
arr1.shape
执行结果:
(2, 3, 4)
"""
最终三个参数代表的含义依次为:二维维度,三维维度,每个数组内数据大小

要注意这些数组必须要是相同大小才可以
"""

1.3、ndarray的常用数据类型 dtype

类型描述
布尔型bool_
整型 int_ int8 int16 int32 int 64
无符号整型uint8 uint16 uint32 uint64
浮点型float_ float16 float32 float64
'''整型:
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数

无符号整型:
只能用来存正数,不能用来存负数'''

"""
补充:
astype()方法可以修改数组的数据类型
示例: 
data.astype(np.float)
"""

1.4、索引和切片

一维索引使用与python本身的列表没有任何区别,所以接下来主要针对大的是多维数组.

  • 索引
# np重塑
arr = np.arange(30).reshape(5,6) # 后面的参数6可以改为-1,相当于占位符,系统可以自动帮忙算几列

在这里插入图片描述

# 将二维变一维
arr.reshape(30)

# 索引使用方法
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])

#现在有这样一组数据,需求:找到20

#列表写法:arr[3][2]
#数组写法:arr[3,2]  # 中间通过逗号隔开就可以了
  • 切片
    切片不会拷贝,直接使用的原视图,如果硬要拷贝,需要在后面加.copy()方法。
#arr数组
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])

arr[0,1:4]  # >>array([1, 2, 3]) 0在前表示第0行,从第一列开始,一直到第3列,即第1,2,3列
arr[1:4,0]  # >>array([ 6, 12, 18]) 0在后表示第0列,从第一行开始,一直到第三行,即第1,2,3行
arr[::2,::2] #行和列都从零开始,步长为2,获取0,2,4行和0,2,4列
			# >>array([[ 0,  2,  4],
             #           [12, 14, 16],
             #           [24, 26, 28]])
arr[:,1]  #第一列上全部索引
		# >>array([ 1,  7, 13, 19, 25])
  • 配合省略号的使用
    切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。
import numpy as np
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print (a[...,1])   # 第2列元素
print (a[1,...])   # 第2行元素
print (a[...,1:])  # 第2列及剩下的所有元素
# 》》结果:
[2 4 5]
[3 4 5]
[[2 3]
 [4 5]
 [5 6]]
  • 布尔索引
    给一个数组,选出数组种所有大于5的数。
li = [random.randint(1,10) for _ in range(30)]
a = np.array(li)
a[a>5]
执行结果:
array([10,  7,  7,  9,  7,  9, 10,  9,  6,  8,  7,  6])
---------------------------------------------
原理:
a>5会对a中的每一个元素进行判断,返回一个布尔数组
a > 5的运行结果:
array([False,  True, False,  True,  True, False,  True, False, False,
       False, False, False, False, False, False,  True, False,  True,
       False, False,  True,  True,  True,  True,  True, False, False,
       False, False,  True])
----------------------------------------------
布尔型索引:将同样大小的布尔数组传进索引,会返回一个有True对应位置的元素的数组
  • 常见通用函数
    一元函数:
函数功能
abs、fabs分别是计算整数和浮点数的绝对值
sqrt计算各元素的平方根
square计算各元素的平方
exp计算各元素的指数e**x
log计算自然对数
sign计算各元素的正负号
ceil计算各元素的ceiling值
floor计算各元素floor值,即小于等于该值的最大整数
rint计算各元素的值四舍五入到最接近的整数,保留dtype
modf将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似
isnan判断数组中的缺失值
isinf表示那些元素是无穷的布尔型数组
cos,sin,tan普通型和双曲型三角函数

二元函数:

函数功能
add将数组中对应的元素相加
subtract从第一个数组中减去第二个数组中的元素
multiply数组元素相乘
divide、floor_divide除法或向下圆整除法(舍弃余数)
power对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B
maximum,fmax计算最大值,fmax忽略NAN
miximum,fmix计算最小值,fmin忽略NAN
mod元素的求模计算(除法的余数)

浮点数有两个特殊值:

注意:
①、nan(Not a Number):不等于任何浮点数(nan != nan)

②、inf(infinity):比任何浮点数都大

  • 数学统计方法
函数功能
sum求和
cumsum求前缀和
mean求平均数
std求标准差
var求方差
min求最小值
max求最大值
argmin求最小值索引
argmax求最大值索引
  • 随机数
    在numpy中也有一个随机数生成函数,它在np.random的子包当中。在Python自带的random当中只能生成一些简单、基础的随机数,而在np.random当中是可以生成一些高级的随机数的。np.random要比Python自带的random包更加灵活。
函数功能
rand返回给定维度的随机数组(0到1之间的数)
randn返回给定维度的随机数组
randint返回给定区间的随机整数
choice给定的一维数组中随机选择
shuffle原列表上将元素打乱(与random.shuffle相同)
uniform给定形状产生随机数组
seed设定随机种子(使相同参数生成的随机数相同)
standard_normal生成正态分布的随机样本数
# rand 返回给定维度的随机数组
np.random.rand(2,2,2)
> array([[[0.37992696, 0.18115096],
        [0.78854551, 0.05684808]],

       [[0.69699724, 0.7786954 ],
        [0.77740756, 0.25942256]]])
-------------------------------------------------------------------------
# randn 返回给定维度的随机数组
np.random.randn(2,4)
> array([[ 0.76676877,  0.21752554,  2.08444169,  1.51347609],
       [-2.10082473,  1.00607292, -1.03711487, -1.80526763]])
-------------------------------------------------------------------------
# randint 返回给定区间的随机整数
np.random.randint(0,20)
> 15
-------------------------------------------------------------------------
# chocie 给定的一维数组中随机选择
np.random.choice(9,3)  # # 从np.range(9)中,(默认)有放回地等概率选择三个数
> array([5, 8, 2])
np.random.choice(9,3,replace=False)  # 无放回地选择
> array([1, 2, 0])
------------------------------------------------------------------------
# shuffle 原列表上将元素打乱(与random.shuffle相同)
arr = np.arange(10)
np.random.shuffle(arr)
arr
> array([4, 5, 0, 3, 7, 8, 9, 1, 2, 6])
------------------------------------------------------------------------
# uniform 给定形状产生随机数组
np.random.uniform(0,1,[3,3,3])
> array([[[0.80239474, 0.37170323, 0.5134832 ],
        [0.42046889, 0.40245839, 0.0812019 ],
        [0.8788738 , 0.48545176, 0.73723353]],

       [[0.79057724, 0.80644632, 0.65966656],
        [0.43833643, 0.53994887, 0.46762885],
        [0.44472436, 0.08944074, 0.34148912]],

       [[0.7042795 , 0.58397044, 0.13061102],
        [0.22925123, 0.97745023, 0.14823085],
        [0.6960559 , 0.07936633, 0.91221842]]])
------------------------------------------------------------------------
# seed 设定随机种子(使相同参数生成的随机数相同)
np.random.seed(0)  # 当seed(0)时生成以下随机数组
np.random.rand(5)
> array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
np.random.seed(2)  # send(5)时生成以下随机数组
np.random.rand(5)
> array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
np.random.seed(0)  # 再次使用send(0)会发现返回最开始的随机数组
np.random.rand(5)
> array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
------------------------------------------------------------------------
# standard_normal 生成正态分布的随机样本数
np.random.standard_normal([2,10])
> array([[-0.17937969, -0.69277058,  1.13782687, -0.16915725, -0.76391367,
        -0.4980731 , -0.36289111,  0.26396031, -0.62964191, -0.4722584 ],
       [-1.51336104,  1.10762468,  0.17623875, -0.94035354,  0.92959433,
        -1.06279492, -0.88640627,  1.92134696, -0.45978052, -1.08903444]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值