01 NumPy 理解与ndarray创建多维数组的常用方法与具体实例

NumPy get started

  1. 导入numpy库
 import numpy as np
  1. 查看版本
np.__version__
  1. numpy核心其实就是一个 ndarray 多维数组(演示 ndarray 输出效果 以及 和 list 的区别)
# 参数 起始值 结束值 数组大小 起始值能取到 结束值取不到 左闭右开区间 [start,end)
ndarr1 = np.random.randint(1,5,3)
ndarr1
print(ndarr1) # 注意 打印出来的这个东西虽然看上去很像列表 但是ndarry和列表list完全是两码事
结果为:[2 1 3]
list1 = [1,2,3]
print(list1)
结果为:[1, 2, 3]
print(type(list1),type(ndarr1)) # 类型是不一样的  只不过ndarray重写了__str__() 所以打印出来的内容看上去像列表
结果为:<class 'list'> <class 'numpy.ndarray'>

一、创建ndarray

1. 使用np.array()创建多维数组

参数为列表: np.array([1,2,3])

注意:

  • numpy默认ndarray的所有元素的类型是相同的
  • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
ndarr1 = np.array([1,2,3]) # 传入列表 就可以创建出一个 多维数组
ndarr1
结果为:array([1, 2, 3])
ndarr1 = np.array([1,2,3.5])# 传入列表  浮点数 也可以创建出一个 多维数组
ndarr1
结果为:array([1. , 2. , 3.5])
ndarr1 = np.array([1,2,"3"])
ndarr1
结果为:array(['1', '2', '3'], dtype='<U11')

2. 使用np的常用函数(routines)创建

包含以下常见创建方法:

1) np.ones(shape, dtype=None, order=‘C’)

功能:按照指定形状创建多维数组,并用1填充

参数:

shape 用于指定创建的多维数组的形状 可以传入2 或者 (2,3)

dtype 数据的类型 np.int8 np.float64

返回值:返沪创建好的多维数组数组

ndarr = np.ones(shape=3)   
结果为:array([1., 1., 1.])
ndarr = np.ones(shape=3,dtype=np.int8) # dtype 可以指定数据的类型
结果为:array([1, 1, 1], dtype=int8)
ndarr = np.ones(shape=(2,3),dtype=np.int8) #通过ones创建的数组 里面填充的内容都是1
结果为:array([[1, 1, 1],
       [1, 1, 1]], dtype=int8)

多维数组

1 数字 [1] 数组 [1,2,3] 数组

[ [1,2,3] [7,8,9] ] 数组里面装数组就是多维数组 数组里 套着 数组 两层数组就是 二维数组

[ [ [1,2,3], [1,2,3], ], [ [1,2,3], [1,2,3], ], ] 数组里套了数组 里面又套了数组 里面双套了一个数组 三维数组

扫描二维码关注公众号,回复: 3981672 查看本文章

2) np.zeros(shape, dtype=float, order=‘C’)

功能类似np.zeros只不过不是用1填充 而是用0填充

np.zeros(shape=5,dtype=np.int8)
np.zeros(shape=(5,5),dtype=np.int8) # 5x5矩阵
np.zeros(shape=(2,3,4),dtype=np.int8) # 创建了一个三维数组 数组里面有两个数组 这两个数组里分别有三个数组 这三个数组里有4个元素
结果为:array([[[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]],

       [[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]]], dtype=int8)

3) np.full(shape, fill_value, dtype=None, order=‘C’)

shape指定形状 一般可以是 2 或者 (2,3) 之类的

fill_value指定填充的值

np.full(shape=(2,3),fill_value=5)
结果为:
array([[5, 5, 5],
       [5, 5, 5]])

4) np.eye(N, M=None, k=0, dtype=float)

功能:创建一个方阵(行和列的数量相等)

N 指定矩阵中有多少行和列

对角线为1其他的位置为0(单位矩阵)

ndarr = np.eye(5,8,dtype=np.int8) # eye创建的就是一个方阵 从左上角到右下角的对角线上都是1 其他位置都是0 这种矩阵叫做单位矩阵
结果为:array([[1, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 0, 0, 0]], dtype=int8)

5.1) np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

功能:把start到stop的这个范围的数,等分成num份儿,填入数组

np.linspace(1,5,3) # 参数 起始值 结束值 把从开始到结束的这个区间分成多少份 
结果为:array([1., 3., 5.])

5.2) np.logspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

功能:把start到stop的这个范围的数,等分成num份儿,获得的值作为10的指数,求出来的值,填入数组

np.logspace(1,5,3) # 1-3 分成3份儿 1 2 3  参数: 起始值 结束值  把开始值到结束值分成几份 取出来这些值作为10的指数 然后求出来一系列的值 放到多维数组中
结果为:array([1.e+01, 1.e+03, 1.e+05])

6) np.arange([start, ]stop, [step, ]dtype=None)

从start,到end,每隔step去一个值,放入一个数组

np.arange(start=1,stop=10,step=2) # 参数 开始值 结束值 步长值 
np.arange(1,5,1) # 注意 起始值能取到 结束值取不到
结果为:array([1, 2, 3, 4])

7) np.random.randint(low, high=None, size=None, dtype=‘l’)

从low到high的范围随机取整数,填充多维数组 size用于指定数组的形状 如 2 (2,3)

np.random.randint(1,10,size = (2,3)) # 产生一个多维数组 数组中的元素 用随机数来填充
# 参数 1.随机数的上界  2.随机数的下界 3.数组的形状 
结果为:array([[1, 2, 9],
       [1, 5, 5]])

8) np.random.randn(d0, d1, …, dn)

传入几个参数,就创建几维数组

产生以0为中心 方差为1 的 标准正太分布 的随机数 填充数组

如 np.random.randn(2,3,3) 产生一个三维数组 数组中有两个数组 两个数组中分别有三个数组 三个数组中每个都有三个元素

np.random.randn(5,5) # 传入几个参数就创建一个几维数组 里面的内容是以0为中心按照正态分布去取的一系列随机值
结果为:
array([[-0.68088861, -1.20301784,  0.47973059,  1.63136009, -1.60700524],
       [ 0.66516772,  0.53055343,  1.07870966, -0.15624372,  0.13364254],
       [ 0.75700615,  0.07725757, -0.61090081,  0.78132797, -1.5065676 ],
       [-0.2074603 , -0.22326078, -1.40836134,  1.95350144, -1.50458383],
       [-0.56365772, -0.39849581, -1.27015926,  0.83656014, -1.88792472]])

9) np.random.normal(loc=0.0, scale=1.0, size=None)

np.random.randn是标准正态分布(以0为中心,方差是1) normal可以指定中心和方差

loc 正态分别的中心

scale 正态分布的变化范围

size 数组的形状 如 2 (2,3)

# randn 固定了分布的中心就是0 方差是1
# normal 可以自己设定分布的中心和方差
np.random.normal(loc=10,scale=5,size=(2,3))
结果为:array([[ 6.29446434, 17.05680548,  7.78128077],
       [ 4.4118268 ,  6.36365627,  4.19318215]])

10) np.random.random(size=None)

size指定三维数组的形状 如 2 (2,3)

函数随机生成0到1的随机数(左闭右开)填充数组

np.random.random(size=(2,3))
结果为:
array([[0.83305889, 0.33539422, 0.07315796],
       [0.22738693, 0.14877283, 0.86321635]])

练习:使用随机数成成一张图片

1.引入matplotlib.pyplot

import matplotlib.pyplot as plt #matplotlib mat matrix 矩阵 plot 绘图 lib library 库 矩阵绘图库

2.读取图片 pyplot.imread(要读取的文件路的径字)

jin = plt.imread("./jin.png")

3.查看引入的图片的属性(其实图片就是一个三维数组)

jin # 其实图片就是一个三维数组 
jin.ndim # ndarray的ndim属性可以查看当前多维数组的维度
jin.shape #一个多维数组 里面有273个数组 这273个数组里面分别有411个数组 411个数组中有三个元素 这个三个元素分别对应 r g b 的值
jin.size #多维数组的总长度
jin.dtype #里面元素的数据类型
jin.shape

4. 随机产生一个数据结构类似的图片

ndarr9 = np.random.random((273,411,3))

5.根据传入的数据去绘制图片 pyplot.imshow(传入多维数组数据)

# plt.imshow(jin) # imshow()函数 
plt.imshow(ndarr9)
结果为:<matplotlib.image.AxesImage at 0x22b48f21710>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lq_520/article/details/83308520
今日推荐