numpy常用函数笔记

The Basics

import numpy as np
  • arange 类似range 构造一个长度为15的数组
a=np.arange(15);a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
  • reshape 将array中的元素重新排列,构成一个 m*n的矩阵
a=a.reshape(3,5);a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
  • ndim 维度 shape 形状 size 矩阵中元素个数 dtype 数据类型 itemsize 元素大小
(a.ndim,a.shape,a.size,a.dtype,a.itemsize)
(2, (3, 5), 15, dtype('int64'), 8)
a=np.array([2,3,4]);a
array([2, 3, 4])
np.zeros((3,4)) # 构造一个3*4的全0矩阵
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
np.ones((3,4)) # 构造一个3*4的全1矩阵
array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])
np.empty((3,4)) # 构造一个空矩阵 , 元素值随机
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
np.arange(10,30,5) # 通过步长构造
array([10, 15, 20, 25])
np.linspace(0,2,9) # 构造浮点数 0到2 直接的9个数
array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])
A = np.array( [[1,1],[0,1]] );B = np.array( [[2,0],[3,4]] )
A*B  # 矩阵中对应元素相乘
array([[2, 0],
       [0, 4]])
A.dot(B) # 数学意义上的矩阵乘法
array([[5, 4],
       [3, 4]])
a=np.random.random((2,3)) # 随机数
a.sum(),a.min(),a.max()
(1.6231236054863918, 0.015016836871937334, 0.9391410245273063)
b=np.arange(12).reshape((3,4));b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
b.sum(axis=0)  # 求第一列的和
array([12, 15, 18, 21])

索引切片和迭代

a=np.arange(10)**3;a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
a[2:5] # 与python切片一样
array([ 8, 27, 64])
a[::-1] # 反转
array([729, 512, 343, 216, 125,  64,  27,   8,   1,   0])
b=np.arange(20).reshape(5,4);b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])
b[2,3]
11
b[0:5,1] # 每一行的第二列 
array([ 1,  5,  9, 13, 17])
b[:,1] #所有行的第二列
array([ 1,  5,  9, 13, 17])
b[1:3,:] # 第二行和第三行的所有列
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

形状

a = np.floor(10*np.random.random((3,4)))
a.shape
(3, 4)
a.ravel()  # returns the array, flattened
array([ 5.,  4.,  8.,  9.,  1.,  5.,  0.,  4.,  5.,  6.,  7.,  5.])
a.reshape(6,2)
array([[ 5.,  4.],
       [ 8.,  9.],
       [ 1.,  5.],
       [ 0.,  4.],
       [ 5.,  6.],
       [ 7.,  5.]])
a.T
array([[ 5.,  1.,  5.],
       [ 4.,  5.,  6.],
       [ 8.,  0.,  7.],
       [ 9.,  4.,  5.]])
a.T.shape
(4, 3)

数组合并

a = np.floor(10*np.random.random((2,2)));a
array([[ 5.,  0.],
       [ 8.,  7.]])
b = np.floor(10*np.random.random((2,2)));b
array([[ 3.,  8.],
       [ 0.,  9.]])
np.vstack((a,b))
array([[ 5.,  0.],
       [ 8.,  7.],
       [ 3.,  8.],
       [ 0.,  9.]])
np.hstack((a,b))
array([[ 5.,  0.,  3.,  8.],
       [ 8.,  7.,  0.,  9.]])

数组切分

a = np.floor(10*np.random.random((2,12)));a
array([[ 8.,  0.,  3.,  3.,  0.,  1.,  3.,  8.,  3.,  5.,  6.,  6.],
       [ 6.,  7.,  1.,  3.,  3.,  6.,  0.,  8.,  1.,  3.,  9.,  3.]])
np.hsplit(a,3)
[array([[ 8.,  0.,  3.,  3.],
        [ 6.,  7.,  1.,  3.]]), array([[ 0.,  1.,  3.,  8.],
        [ 3.,  6.,  0.,  8.]]), array([[ 3.,  5.,  6.,  6.],
        [ 1.,  3.,  9.,  3.]])]

索引技巧

  • 通过其他数组索引
a = np.arange(12)**2;a
array([  0,   1,   4,   9,  16,  25,  36,  49,  64,  81, 100, 121])
i=np.array( [ 1,1,3,8,5 ]);i
array([1, 1, 3, 8, 5])
a[i]
array([ 1,  1,  9, 64, 25])
j = np.array( [ [ 3, 4], [ 9, 7 ] ] );j #这是一个新矩阵,元素是在a总的位置
array([[3, 4],
       [9, 7]])
a[j]
array([[ 9, 16],
       [81, 49]])
  • 通过布尔值索引
a = np.arange(12).reshape(3,4);a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
b=a>4;b
array([[False, False, False, False],
       [False,  True,  True,  True],
       [ True,  True,  True,  True]], dtype=bool)
a[b]
array([ 5,  6,  7,  8,  9, 10, 11])
a[b]=0;a
array([[0, 1, 2, 3],
       [4, 0, 0, 0],
       [0, 0, 0, 0]])

随机数

import numpy.random as random
random.rand(2,2) # 生成0到1的随机数
array([[ 0.22720579,  0.34879209],
       [ 0.44804558,  0.60633532]])
random.randn(2,2) # 标准正态分布
array([[-0.52681005,  0.94763894],
       [-0.0359733 , -0.49147302]])
random.randint(2,6,(3,3))  # 整形
array([[4, 4, 5],
       [5, 4, 3],
       [2, 3, 2]])
random.random_sample((3,3))
array([[ 0.85905432,  0.65012434,  0.89731924],
       [ 0.28359538,  0.11117507,  0.68106958],
       [ 0.14467215,  0.62230059,  0.60000001]])
random.random_sample(3) 
array([ 0.71007475,  0.93676534,  0.56104804])
random.random(3) 
array([ 0.6353798 ,  0.90959019,  0.13963355])
random.choice(5, 3) # 从5个里面随机选三个 如果a是一个整数 则生成arange数组里面选
array([4, 1, 3])
random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0]) # p控制每个元素被选择的概率
array([3, 2, 3])
arr = np.arange(10)  #洗牌
random.shuffle(arr)
arr
array([6, 8, 7, 1, 2, 9, 4, 0, 5, 3])
random.permutation(10) #随机排列
array([9, 2, 1, 6, 5, 3, 7, 4, 0, 8])

排序,搜索,计数

data=random.permutation(10);data
array([0, 7, 6, 4, 1, 8, 5, 3, 9, 2])
data=data.reshape(2,5);data
array([[0, 7, 6, 4, 1],
       [8, 5, 3, 9, 2]])
np.sort(data)
array([[0, 5, 3, 4, 1],
       [8, 7, 6, 9, 2]])
np.argmax(data,axis=1) # 取不同轴的最大值所在的位置
array([1, 3])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值