numpy基础学习笔记(01)

 

numpy基础

 

numpy是数据分析中的重要的部分,numpy用C语言编写,用于矩阵计算等操作

准备工作:下载numpy -- 官网下载或pip install numpy

 

import numpy as np

 

目录

numpy基础

创建矩阵

基础运算

索引

 



 

创建矩阵

  • array基础

    相关代码:

    #定义一个2行3列的矩阵
    array = np.array([[1,2,3],[2,3,4]]) 
    print(array)         #输出array
    print("number of dim:",array.ndim)  #array是几维
    print("shape of array:",array.shape)  #array的形状(几行几列)
    print("size of array:",array.size)   #共有多少个元素

    输出结果:

    [[1 2 3]
     [2 3 4]]
    number of dim: 2
    shape of array: (2, 3)
    size of array: 6
  • 特殊矩阵定义

    相关代码:

    a = np.zeros((3,4))     #3行4列的0矩阵
    b = np.ones((3,4))      #3行4列的矩阵,矩阵中的数字均为1
    print(a)
    print(b)

     

    输出结果:

    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])    #a
           
           
    array([[1., 1., 1., 1.],
           [1., 1., 1., 1.],
           [1., 1., 1., 1.]])    #b
  • arange

    arange函数用于创建等差数组,使用频率非常高,arange非常类似range函数,会python的人肯定经常用range函数,比如在for循环中,几乎都用到了range,两者的区别仅仅是arange返回的是一个数据,而range返回的是list

    arange(n,m,s)

    arange()中最少包含一个参数,最多包含3个参数

    n代表起始值,m代表终止值,s代表步长()

     

    相关代码:

    c = np.arange(10,20,2)
    print(c)
    #以10开始,以20结束(不包括20),步长为2
    ​
    d = np.arange(12)
    print(d)
    #以0开始,以11结束(不包含12),步长默认为1
    ​
    e = np.arange(2,8)
    print(e)
    #以2开始,以7结束(不包含8),步长默认为1

     

    输出结果:

    [10 12 14 16 18]   #c
    [ 0  1  2  3  4  5  6  7  8  9 10 11]    #d
    [2 3 4 5 6 7]      #e
  • reshape函数

     

    reshape()

    数组array中的方法,作用是将数据重新组织

     

    相关代码:

    f = np.arange(12).reshape(3,4)
    print(f)

     

    输出结果:

    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])

     

    需要注意的是:reshape新生成数组和原数组公用一个内存,不管改变哪个都会互相影响

    d = np.arange(12)
    f = np.arange(12).reshape(3,4)print(f)
    ​
    ​
    #将d中第一个数字改变为111
    d[0] = 111
    print(d)
    print(f)

     

    输出结果:

    array([111,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11])
    array([[111,   1,   2,   3],
           [  4,   5,   6,   7],
           [  8,   9,  10,  11]])

     

  • linspace

    linspace(start, stop, [num=50, endpoint=True, retstep=False, dtype=None])

    其中[num=50, endpoint=True, retstep=False, dtype=None]可选

    在指定的间隔内返回均匀间隔的数字

    返回num均匀分布的样本,在[start, stop]这个区间的端点可以任意的被排除在外

     

     

    a = np.linspace(1,10,20)
    #以1为起始值,10为终止值(包含10),共分为20个数  --> 自动匹配步长
    print(a)

     

    输出结果:

    array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
            3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
            5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
            8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])

     

     

    b = np.linspace(1,10,6).reshape(2,3)
    print(b)

    输出结果:

    array([[ 1. ,  2.8,  4.6],
           [ 6.4,  8.2, 10. ]])

 


 

基础运算

  • 加减乘运算

    首先定义两个一维矩阵

    a = np.array([10,20,30,40])
    b = np.arange(4)
    print(a)
    print(b)

    输出结果:

    [10 20 30 40]
    [0 1 2 3]

接着进行基础运算:

#每个位置的对应元素相减
c1 = a - b  
#每个位置的对应元素相加
c2 = a + b
#b矩阵元素平方
c3 = b ** 2
#10乘以a矩阵的每个元素取sin值
c4 = 10 * np.sin(a)
#线性代数中的矩阵的乘法概念,这里为将a中的每个元素与b中对应元素相乘后相加
c_dot = np.dot(a,b)
#每个元素对应相乘
c5 = a * b
​
​
print(c1)
print(c2)
print(c3)
print(c4)
print(c_dot)
print(c5)

 

输出结果:

[10 19 28 37]
[10 21 32 43]
[0 1 4 9]
[-5.44021111  9.12945251 -9.88031624  7.4511316 ]
200
[  0  20  60 120]

 

比较运算符

举例:

print(b<3)

输出结果为布尔值

[ True  True  True False]

 

同理,定义两个二维矩阵

a = np.array([[1,1],
         [0,1]])
b = np.arange(4).reshape(2,2)
print(a)
print(b)

输出结果:

array([[1, 1],
       [0, 1]])
       
array([[0, 1],
       [2, 3]])

 

相关代码:

#矩阵的乘法
c_dot = np.dot(a,b)
c_dot_2 = a.dot(b)
​
#对应元素相乘
c = a * b

输出结果:

[[2 4]
 [2 3]]
 
[[2 4]
 [2 3]]
 
[[0 1]
 [0 3]]

 

  • 求和/平均值/最大/最小值

 

random(m,n)

随机生成m行n列的矩阵,矩阵中均为从0至1的随机数

 

sum()/ min()/max()的使用

a = np.random.random((2,4))
#a的和
np.sum(a)
#a的最小值
np.min(a)
#a的最大值
np.max(a)
​
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))

输出结果:

array([[0.42179824, 0.85771199, 0.00553504, 0.62031208],
       [0.17124248, 0.030651  , 0.55065275, 0.41711456]])
       
3.075018148348292
​
0.005535040390910018
​
0.8577119893768688

 

 

另外,可以按照列/行求和/平均值/最大/最小值

axis

例如:

np.sum(a, axis = 1)   #每一行求一个和
np.min(a, axis = 0)   #每一列求一个最小值

输出结果:

array([1.90535736, 1.16966079])
​
array([0.17124248, 0.030651  , 0.00553504, 0.41711456])

 

  • 其余运算

    A = np.arange(2,14).reshape(3,4)
    print(A)

输出结果:

[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]

 

 

相关代码

np.argmin(A)     #求最小值所在的索引
np.argmax(A)     #最大值所在的索引
np.mean(A)       #平均值
np.median(A)     #中位数
np.cumsum(A)     #累计求和
np.diff(A)       #累计求差
np.nonzero(A)    #非0的坐标
np.sort(A)       #逐行排序
np.transpose(A)  #转置
A.T              #转置
np.clip(A,5,9)   #将矩阵中大于9的值变为9,小于5的值变为5,其余不变

 

输出结果:

0      # A中的最小值为2,索引为0 (注意:索引从0开始)
11     # A中的最大值为13,索引为11
7.5    #平均数
7.5    #中位数
​
#累计求和
#第一个数为原始A矩阵的第一个数,第二个数为原始A矩阵第一个数加上第二个数...以此类推
array([ 2,  5,  9, 14, 20, 27, 35, 44, 54, 65, 77, 90], dtype=int32)
​
#累计求差
#每一行的数均为后一位数减去前一位数,得到的列数会减少一列
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
       
#非零的坐标
#第一个矩阵为行坐标,第二个矩阵为列坐标
#即:A[0][0],A[0][1],A[0][2]....不为0
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64),
 array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
 
 #排序
 array([[ 2,  3,  4,  5],
       [ 6,  7,  8,  9],
       [10, 11, 12, 13]])
       
 #转置
 array([[ 2,  6, 10],
       [ 3,  7, 11],
       [ 4,  8, 12],
       [ 5,  9, 13]])
​
#clip
array([[5, 5, 5, 5],
       [6, 7, 8, 9],
       [9, 9, 9, 9]])

 

 


 

索引

A=np.arange(3,15)

print(A)

[ 3  4  5  6  7  8  9 10 11 12 13 14]

B= np.arange(3,15).reshape(3,4)

print(B)

array([[ 3,  4,  5,  6],
       [ 7,  8,  9, 10],
       [11, 12, 13, 14]])

B[2]

array([11, 12, 13, 14])

B[1,1]

8

B[2,:] # 冒号:表示所有数,这里表示第2行的所有数

array([11, 12, 13, 14])

B[:,1] #第一列的所有数

array([ 4,  8, 12])

B[1,1:3]

array([8, 9])

B.flatten() #转变为1行

array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

 

 

此外,可以用for循环迭代行

for row in B:

print(row)

输出结果:

[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]

用for循环迭代列需要用到矩阵的转置

for row in B.T:
    print(row)

输出结果:

[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]

用for循环输出每一个数

for item in B.flat:         #用flat将B矩阵转变为1行,依次输出每一个数
    print(item)

输出结果:

3
4
5
6
7
8
9
10
11
12
13
14

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值