Numpy数组的基本使用

Numpy

Numpy 最为核⼼的数据类型是 ndarray ,使⽤ ndarray 可以处理⼀维、⼆维和多维数组,该对象相当于是⼀个快 速⽽灵活的⼤数据容器。

创建

一维数组

list1 = [[random.randint(20,100) for _ in range(3)] for _ in range(5)]
list1
[[70, 99, 56], [99, 21, 35], [59, 53, 70], [44, 44, 34], [91, 95, 40]]
  1. 通过 列表直接转
ar1 = np.array(list1)
ar1
array([[70, 99, 56],
       [99, 21, 35],
       [59, 53, 70],
       [44, 44, 34],
       [91, 95, 40]])
  1. 使用arange
ar2 = np.arange(1,20)
ar2
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19])
  1. 使用np.random创建
ar3 = np.random.rand(10)
ar3
array([0.03567423, 0.86881279, 0.70364535, 0.06383336, 0.1424191 ,
       0.11051172, 0.0623674 , 0.24031952, 0.85205838, 0.49430325])

二维数组

  1. 使用zeros、ones、full的方式
ar4 = np.zeros((3,2))
print(ar4)
​
ar4 = np.full((2,3),5)
ar4
[[0. 0.]
 [0. 0.]
 [0. 0.]]
array([[5, 5, 5],
       [5, 5, 5]])
  1. 使用np.random
ar5 = np.random.randint(1,50,(3,4))
ar5
array([[28,  3, 38,  7],
       [29, 33, 38,  4],
       [41, 47, 18, 17]])
  1. 使用reshape将一维数组转成二维数组 此方法转换前后个数要相同
ar6 = np.array([1,2,3,4,5,6]).reshape(2,3)
ar6
array([[1, 2, 3],
       [4, 5, 6]])
  1. 使用np.eye 创建单位矩阵
ar7 = np.eye(2)
ar7
array([[1., 0.],
       [0., 1.]])

索引和切片

注意: 切片会创建新数组,但是他实际是共享了原数组的空间,所以修改切片后的,原来的也会变;
花式索引和布尔索引也会创建新数组,但没有共享原数组,是建了一个完全的新数组;

普通索引

一维数组


总结:一维数组的索引使用和python中的list一致

array23 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
array23
array([1, 2, 3, 4, 5, 6, 7, 8, 9])


正向
print(array23[0], array23[array23.size - 1])
逆向
print(array23[-array23.size], array23[-1])
1 9
1 9
二维数组

总结:与python中嵌套列表索引类似,一层一层的取,从0到n-1,可以取行,但是不能取出整列!
array1

array1 = np.random.randint(20,50,(3,3))
array1
array([[29, 30, 28],
       [29, 29, 34],
       [34, 21, 37]])
array1[2]
array([34, 21, 37])
0
array1[0][0]
29
array1.ndim
2

切片

一维数组与list相同;
二维数组可以理解成先切行再切列,也可以理解成一层一层的切,可以单独切出列来
如果索引配合切片使用需要注意,此时会降维

array1
array([[29, 30, 28],
       [29, 29, 34],
       [34, 21, 37]])
# 第一行(:1),第二、三列(1:3)
array1[:1,1:3]
array([[30, 28]])
# 都用切片,维度不变
array1[2:,:]
array([[34, 21, 37]])
print('维度不变:', array1[:,2:])
print('索引配合切片,降维:', array1[:,2])
维度不变: [[28]
 [34]
 [37]]
索引配合切片,降维: [28 34 37]

花式索引

花式索引(Fancy indexing)是指利⽤整数数组进⾏索引,可以使⽤正向或负向索引。
对于一维数组,目的就是取多个值,与切片相比最大的区别就是可以跳着取数

array23
array([1, 2, 3, 4, 5, 6, 7, 8, 9])


# 一维数组利用数组[1,2] 来进行索引,跳着去第1和第5个
array23[[1,5]]
array([2, 6])
array1
array([[29, 30, 28],
       [29, 29, 34],
       [34, 21, 37]])

# 二维数组里利用一个列表,取得是行,不会降维
array1[[0]]
array([[29, 30, 28]])

# 如果是利用二个列表做索引,是用行,列的方式取值:0行1列,2行0列,会降维
array1[[0,2],[1,0]]
array([30, 34])

布尔索引

布尔索引就是通过布尔类型的数组对数组元素进⾏索引(索引也是个索引,所以需要两个[[]])

array23[array23 >=5]
array([5, 6, 7, 8, 9])

数组的属性

常用的一些属性:

  1. size 数组元素的个数
  2. shape 数组的形状
  3. dtype 数组元素的数据类型
  4. ndim 数组的维度
  5. itemsize 数组中单个元素占的空间
  6. nbytes 所有元素占的字节空间

数组的函数

统计方法

统计⽅法主要包括:
sum() 、 mean() 、 std() 、 var() 、 min() 、 max() 、 argmin() 、 argmax() 、 cumsum()等,
分别⽤于对数组中的元素求和、求平均、求标准差、求⽅差、找最⼤、找最⼩、求累积和等,请参考下⾯的代码。

array28 = np.array([1, 2, 3, 4, 5, 5, 4, 3, 2, 1])
print(array28.sum())
print(array28.mean())
print(array28.max())
print(array28.min())
print(array28.std())
print(array28.var())
print(array28.cumsum())
30
3.0
51
1.4142135623730951
2.0
[ 1 3 6 10 15 20 24 27 29 30]

需要注意的是,这些方法中基本都有一个axis参数,可以决定计算的方向,默认是None,也就是按全部数据计算。
当axis=0时,说明是按行的方向计算,得到的就是列数的结果;
当axis=1时,是按列方向计算,得到的是行数的结果;

array1
array([[29, 30, 28],
       [29, 29, 34],
       [34, 21, 37]])
# 按行的方向算 x1+x2+...+x5 结果是列数
ar1.mean(axis=0)
array([68.4, 63. , 66.6])

# 按列的方向算 每行列1-列3的平均值 结果是行数
ar1.mean(axis=1)
array([65.        , 80.        , 58.        , 69.66666667, 57.33333333])

其他方法

  1. all() / any() ⽅法:判断数组是否所有元素都是 True / 判断数组是否有为 True 的元素。

  2. astype() ⽅法:拷⻉数组,并将数组中的元素转换为指定的类型。

  3. dump() ⽅法:保存数组到⽂件中,可以通过 NumPy 中的 load() 函数从保存的⽂件中加载数据创建数组。 代码:

    array31.dump('array31-data') 
    array32 = np.load('array31-data', allow_pickle=True) 
    array32
    输出:
    array([[1, 2], [3, 4], [5, 6]])
    
  4. fill() ⽅法:向数组中填充指定的元素。

  5. flatten() ⽅法:将多维数组扁平化为⼀维数组。 代码:

    array32.flatten() 
    输出: 
    array([1, 2, 3, 4, 5, 6])
    
  6. nonzero() ⽅法:返回⾮0元素的索引。

  7. round() ⽅法:对数组中的元素做四舍五⼊操作。

  8. sort() ⽅法:对数组进⾏就地排序。 代码:

    array33 = np.array([35, 96, 12, 78, 66, 54, 40, 82]) 
    array33.sort() 
    array33
    
    输出: 
    array([12, 35, 40, 54, 66, 78, 82, 96])
    
    1. swapaxes() 和 transpose() ⽅法:交换数组指定的轴。 代码:
    # 指定需要交换的两个轴,顺序⽆所谓 
    array32.swapaxes(0, 1)
    输出:
    array([[1, 3, 5], [2, 4, 6]])
    代码:
    # 对于⼆维数组,transpose相当于实现了矩阵的转置 array32.transpose()
    输出:
    array([[1, 3, 5], [2, 4, 6]])
    
  9. tolist() ⽅法:将数组转成Python中的 list 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值