Numpy基础

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引(以下数组皆为ndarray类型,而非list类型

1.ndarray的属性

ndarray 对象是用于存放同类型元素的多维数组

属性 作用
ndim 返回int,表示数组的维数
shape 返回tuple。表述数组的尺寸,对于n行m列的矩阵,形状为(n,m)
size 返回int,表示数组的元素总数,等于数组形状的乘积
dtype 返回data-type,描述数组中元素的类型
itemsize 返回int,表示数组的每个元素的大小(以字节为单位)
import numpy as np
a=np.array([[1,2,3],[1,2,4]],dtype=np.float32)

#数组元素总数
print(a.size) #输出结果:6
# 数组的形状,多少行多少列
print(a.shape) #输出结果:(2,3)
# 数组的维数
print(a.ndim) #输出结果:2
# 数组中元素类型
print(a.dtype) #输出结果:float32

2.修改ndarray的固有属性

2.1 改变数组维度

import numpy as np
a=np.array([[1,2,3],[1,2,4]],dtype=np.float32)

# 修改数组形状
print(a.reshape(3,2))  
'''
输出结果为:
[[1. 2.]
 [3. 1.] 
 [2. 4.]]
'''

3.生成特殊数组

生成的所有数组都为ndarray类型,可构造数组:

  • 顺序数组
  • 等差数组
  • 等比数组
  • 全零多维数组
  • 单位多维数组
  • 对角线多维数组
import numpy as np

#生成顺序数组
print(np.arange(10)) # 输出结果:[0 1 2 3 4 5 6 7 8 9]
#创建等差数组
print(np.linspace(0,10,10)) #输出结果:[ 0.  1.11111111  2.22222222  3.33333333  4.44444444  5.55555556  6.66666667  7.77777778  8.88888889 10. ]
# 创建不包含结尾数字的等差数组
print(np.linspace(0,10,10,endpoint=False)) # 输出结果:[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
# 创建等比数列
print(np.logspace(0,10,10,endpoint=False,base=2)) # 输出结果:[1.  2.  4.  8.  16.  32.  64.  128.  256.  512.]
# 生成全0数组
print(np.zeros(2)) # 输出结果:[0. 0.]
# 生成两行三列的全0数组
print(np.zeros((2,3))) 
'''
输出结果为:
[[0. 0. 0.]
 [0. 0. 0.]]
'''
# 生成3阶单位数组
print(np.eye(3))
'''
输出结果为:
[[1. 0. 0.]
 [0. 1. 0.] 
 [0. 0. 1.]]
'''
# 生成元素值全为1的数组
print(np.ones(2)) # 输出结果:[1. 1.]
# 生成元素值全为1的数组
print(np.ones((2,3))) 
'''
输出结果为:
[[1. 1. 1.]
 [1. 1. 1.]]
'''
#生成指定对角线元素值的数组
print(np.diag([1,3,7])) 
'''
输出结果为:
[[1 0 0]
 [0 3 0] 
 [0 0 7]]
'''

4.生成随机数数组

生成的所有数组都为ndarray类型,可生成随机数数组:

  • 0-1之间的随机数一维数组
  • 0-1之间的随机数多维数组
  • 均匀分布的随机数多维数组
  • 正态分布的随机数多维数组
  • 0-10之间的随机数多维数组
import numpy as np

# 生成4个0-1之间的随机数数组
print(np.random.random(size=4)) #输出结果:[0.71768555 0.5947797  0.79972761 0.50824454]
# 生成0-1之间的随机数矩阵
print(np.random.random(size=(2,3)))
'''
输出结果为:
[[0.32749832 0.04388334 0.56163757]
 [0.4309314  0.0344187  0.34532551]]
'''
# 生成4个均匀分布的随机数矩阵
print(np.random.rand(2,3,2)) 
'''
输出结果为:
[[[0.66295917 0.70471342]
  [0.05790362 0.49323016] 
  [0.10871097 0.64858176]] 
 [[0.07858738 0.63434474] 
  [0.537959   0.01110871]  
  [0.53534531 0.15553675]]]
'''
# 生成正态分布的随机数矩阵
print(np.random.randn(2,3,2))
'''
输出结果为:
[[[-1.31108764  0.09089742]
  [-0.17214132 -0.41071538] 
  [-0.06360873  0.65520704]] 
 [[-0.08087163  1.73616904]  
  [ 2.27342071 -0.23829859]  
  [ 0.73271656  1.0389563 ]]]
'''
# 随机生成0-10之间的2行3列随机数矩阵
print(np.random.randint(0,10,size=(2,3)))
'''
输出结果为:
[[2 6 5] 
 [5 6 1]]
'''

5.索引与切片

5.1 一维的索引

import numpy as np

# 一维数组的索引
a=np.arange(10) #a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 数组的第三个值
print(a[2])  #输出结果:2
#数组从第三个值之后的值
print(a[2:])  #输出结果:[2 3 4 5 6 7 8 9]
#数组第六个值之前的值
print(a[:5])  #输出结果:[0 1 2 3 4]
#数组从第二个值到最后一个值
print(a[1:-1])  #输出结果:[1 2 3 4 5 6 7 8]
#数组从第二个值到最后一个值,其间步长为2
print(a[1:-1:2])  #输出结果:[1 3 5 7]

5.2 多维的索引

前为行,后为列,然后各自看切片

import numpy as np

# 多维数组的索引
b=np.random.randint(0,10,size=(2,3))
'''
输出结果为:
[[4 6 7] 
 [8 2 4]]
'''
# 输出第二行所有元素
print(b[1,:]) #输出结果:[8 2 4]
#输出第一列所有元素
print(b[:,0]) #输出结果:[4 8]
#行上全取,列上使用步长为2进行取
print(b[:,::2])
'''
输出结果为:
[[4 7] 
 [8 4]]
'''

6.降维

import numpy as np

# 多维数组的索引
b=np.random.randint(0,10,size=(2,3)) #输出结果:[[2 8 5] [6 6 3]]
# 展开多维数组变为一维数组
print(b.ravel()) #输出结果:[2 8 5 6 6 3]

7.矩阵化

7.1 矩阵化的方式

import numpy as np

#创建矩阵
print(np.mat([[1,2],[3,4]]))
'''
输出为:
[[1 2]
 [3 4]]
'''
#创建矩阵
print(np.matrix([[11,21],[31,41]]))
'''
输出为:
[[11 21]
 [31 41]]
'''

7.2 矩阵拼接

import numpy as np


a=np.mat([[1,2],[3,4]])
'''
输出为:
[[1 2]
 [3 4]]
'''
b=np.matrix([[11,21],[31,41]])
'''
输出为:
[[11 21]
 [31 41]]
'''
#横向合成矩阵
print(np.bmat('a b'))
'''
输出为:
[[ 1  2 11 21]
 [ 3  4 31 41]]
'''

7.3 矩阵乘法

import numpy as np
a=[[1,2],[3,4]]
'''
输出为:
[[1 2]
 [3 4]]
'''
b=[[1,1],[1,1]]
'''
输出为:
[[1 1]
 [1 1]]
'''

#作为矩阵相乘法一
print(np.array(a).dot(np.array(b)))
#作为矩阵相乘法二
print(np.matrix(a)*np.matrix(b))
'''
输出为:
[[3 3]
 [7 7]]
'''

7.4 矩阵转置

import numpy as np
a=np.mat([[1,1],[3,4]])
'''
输出为:
[[1 1]
 [3 4]]
'''
#使用矩阵内置算法求逆
print(a.T)
'''
输出为:
[[1 3]
 [2 4]]
'''

8.拼接

8.1 横向拼接

import numpy as np

#拼接数组
a=np.arange(10).reshape(2,5)
'''
输出结果为
[[0 1 2 3 4]
 [5 6 7 8 9]]
'''

b=np.linspace(0,1,endpoint=False,num=10).reshape(2,5)
'''
输出结果为
[[0.  0.1 0.2 0.3 0.4]
 [0.5 0.6 0.7 0.8 0.9]]
'''

#横向拼接法一
print(np.vstack((a,b)))
#横向拼接法二
print(np.concatenate((a,b),axis=0))
'''
输出结果为
[[0.  1.  2.  3.  4. ]
 [5.  6.  7.  8.  9. ]
 [0.  0.1 0.2 0.3 0.4]
 [0.5 0.6 0.7 0.8 0.9]]
'''

8.2 纵向拼接

import numpy as np

#拼接数组
a=np.arange(10).reshape(2,5)
'''
输出结果为
[[0 1 2 3 4]
 [5 6 7 8 9]]
'''
b=np.linspace(0,1,endpoint=False,num=10).reshape(2,5)
'''
输出结果为
[[0.  0.1 0.2 0.3 0.4]
 [0.5 0.6 0.7 0.8 0.9]]
'''
#纵向拼接法一
print(np.hstack((a,b)))
#纵向拼接法二
print(np.concatenate((a,b),axis=1))
'''
输出结果为
[[0.  1.  2.  3.  4.  0.  0.1 0.2 0.3 0.4]
 [5.  6.  7.  8.  9.  0.5 0.6 0.7 0.8 0.9]]
'''

9.分割

9.1 横向分割

import numpy as np

a=np.arange(36).reshape(6,6)
'''
输出结果为:
[[ 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]
 [30 31 32 33 34 35]]
'''
#横向分割数组法一
print(np.hsplit(a,3))
#横向分割数组法二
print(np.split(a,3,axis=1))
'''
输出结果为:
[array([[ 0,  1],
        [ 6,  7],
        [12, 13],
        [18, 19],
        [24, 25],
        [30, 31]]), 
 array([[ 2,  3],
        [ 8,  9],
        [14, 15],
        [20, 21],
        [26, 27],
        [32, 33]]),
 array([[ 4,  5],
        [10, 11],
        [16, 17],
        [22, 23],
        [28, 29],
        [34, 35]])]
'''

9.2 纵向分割

import numpy as np

a=np.arange(36).reshape(6,6)
'''
输出结果为:
[[ 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]
 [30 31 32 33 34 35]]
'''
#纵向分割数组法一
print(np.vsplit(a,3))
#横向分割数组法二
print(np.split(a,3,axis=0))
'''
输出结果为:
[array([[ 0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11]]),
 array([[12, 13, 14, 15, 16, 17],
        [18, 19, 20, 21, 22, 23]]), 
 array([[24, 25, 26, 27, 28, 29],
        [30, 31, 32, 33, 34, 35]])]
'''

10.数据读取和保存

10.1 npy文件

import numpy as np
a=np.random.random((3,3))
'''
输出为:
[[0.50212588 0.25281993 0.29829224]
 [0.73546263 0.28386965 0.68986956]
 [0.14592709 0.71318903 0.3625369 ]]
'''
#保存一个ndarray数组到npy文件
np.save('./tmp/tmp.npy',a)
#读取npy文件
print(np.load('./tmp/tmp.npy'))
'''
输出为:
[[0.50212588 0.25281993 0.29829224]
 [0.73546263 0.28386965 0.68986956]
 [0.14592709 0.71318903 0.3625369 ]]
'''

10.2 npz文件

import numpy as np
a=np.random.random((3,3))
'''
输出为:
[[0.50212588 0.25281993 0.29829224]
 [0.73546263 0.28386965 0.68986956]
 [0.14592709 0.71318903 0.3625369 ]]
'''
b=np.random.randn(2,2)
'''
输出为:
[[ 0.19706792 -0.74165399]
 [ 0.55448015  1.753524  ]]
'''

#保存多个ndarray数组到npz文件
np.savez('./tmp/tmp2.npz',a,b)
#读取npz文件
d=np.load('./tmp/tmp2.npz')
#展示有哪些ndarray数据
print(d.files) #输出为:['arr_0', 'arr_1']
#逐个展示npz文件里各个ndarray数据
print(d['arr_0'])
'''
输出为:
[[0.50212588 0.25281993 0.29829224]
 [0.73546263 0.28386965 0.68986956]
 [0.14592709 0.71318903 0.3625369 ]]
'''
print(d['arr_1'])
'''
输出为:
[[ 0.19706792 -0.74165399]
 [ 0.55448015  1.753524  ]]
'''

10.3 txt文件

import numpy as np

a=np.random.random((3,3))
'''
输出为:
[[0.51002495 0.64689764 0.97295432]
 [0.42998593 0.21590222 0.65957127]
 [0.13704206 0.55542585 0.525483  ]]
'''
np.savetxt('./tmp/tmp3.txt',a)

#常规导入
print(np.loadtxt('./tmp/tmp3.txt'))
#可以进行填充缺失值的导入方式
print(np.genfromtxt('./tmp/tmp3.txt'))
'''
输出为:
[[0.51002495 0.64689764 0.97295432]
 [0.42998593 0.21590222 0.65957127]
 [0.13704206 0.55542585 0.525483  ]]
'''

11.数据的处理

11.1 乘法

import numpy as np
a=[[1,2],[3,4]]
b=[[1,1],[1,1]]

#作为二维数组进行相乘
print(np.array(a)*np.array(b))
'''
输出为:
[[1 2]
 [3 4]]
'''

11.2 广播计算

import numpy as np

#广播计算
a=[[0]*3,[1]*3,[2]*3,[3]*3]
print(a)
'''
输出为:
[[0, 0, 0], 
 [1, 1, 1], 
 [2, 2, 2], 
 [3, 3, 3]]
'''
print(np.array(a)+np.array([1,2,3]))
'''
输出为:
[[1 2 3]
 [2 3 4]
 [3 4 5]
 [4 5 6]]
'''
print(np.array(a)+np.array([[1],[2],[3],[4]]))
'''
输出为:
[[1 1 1]
 [3 3 3]
 [5 5 5]
 [7 7 7]]
'''

11.2 去重、排序、均值等计算

import numpy as np

#读取iris数据集里的数据,并对其进行排序,去重,并求出和,累积和,均值,标准差,方差,最小值,最大值
data=np.loadtxt('./data/iris_sepal_length.csv')
#进行排序
data.sort()
#数据去重
data=np.unique(data)
#求和
print(np.sum(data)) #输出为:210.39999999999998
print(np.cumsum(data))
'''
输出为:
[  4.3   8.7  13.2  17.8  22.5  27.3  32.2  37.2  42.3  47.5  52.8  58.2
  63.7  69.3  75.   80.8  86.7  92.7  98.8 105.  111.3 117.7 124.2 130.8
 137.5 144.3 151.2 158.2 165.3 172.5 179.8 187.2 194.8 202.5 210.4]
'''
print(np.mean(data)) #求均值 输出为:6.011428571428571
print(np.std(data)) #求标准差 输出为:1.0289443768310533
print(np.var(data)) #求方差 输出为:1.0587265306122449
print(np.min(data)) #求最小值 输出为:4.3
print(np.max(data)) #求最大值 输出为:7.9

12.参考文章

菜鸟教程-Numpy

【创作不易,望点赞收藏,若有疑问,请留言,谢谢】

posted @   东血  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

本站勉强运行 1780 天 21 小时 49 分 18 秒

目录导航
目录导航
Numpy基础
1.ndarray的属性
2.修改ndarray的固有属性
2.1 改变数组维度
3.生成特殊数组
4.生成随机数数组
5.索引与切片
5.1 一维的索引
5.2 多维的索引
6.降维
7.矩阵化
7.1 矩阵化的方式
7.2 矩阵拼接
7.3 矩阵乘法
7.4 矩阵转置
8.拼接
8.1 横向拼接
8.2 纵向拼接
9.分割
9.1 横向分割
9.2 纵向分割
10.数据读取和保存
10.1 npy文件
10.2 npz文件
10.3 txt文件
11.数据的处理
11.1 乘法
11.2 广播计算
11.2 去重、排序、均值等计算
12.参考文章
发布于 2022-06-29 10:04
点击右上角即可分享
微信分享提示