Numpy数组

生成数组的方法

在numpy中一般是两种操作方式:

  • ndarray的变量名.方法()
  • np.函数名(),比如np.array()

生成0和1的数组:

Numpy数组_第1张图片
Numpy数组_第2张图片

numpy.zeros_like(a):a是一个ndarray,即产生一个维度和a一样的小的全0数组。

Numpy数组_第3张图片
Numpy数组_第4张图片

可以通过np中的arange()方法生成一个ndarray类的数组:

Numpy数组_第5张图片
Numpy数组_第6张图片

  • 上面的演变有可能在机器学习中遇到,所以,要认识一下。
    在这里插入图片描述
  • 指定数组形状的时候不仅可以使用(),还可以使用[]
    在这里插入图片描述
  • 在机器学习和深度学习的时候使用列表不报警告信息,使用元组的时候报警告信息。
  • 同理:ones_like()也是这样使用的。
    Numpy数组_第7张图片

从现有数组生成(也就是对现在的数组进行复制或是引用):

Numpy数组_第8张图片

关于array和asarray的不同:

Numpy数组_第9张图片

分别使用array()和asarray()通过data数组创建出来新的数组:

Numpy数组_第10张图片

  • 现在来修改data数组,分别来看看通过array()和asarray()创建出来的新数组有没有发生改变:
    Numpy数组_第11张图片
  • 总结:array()会重新生成一个新的数组,而asarray()相当于索引的形式,并没有真正的创建一个新的数组,类似是一种引用的形式。

通过copy()创建数组

Numpy数组_第12张图片
Numpy数组_第13张图片

  • 修改data数组中元素的值:
    Numpy数组_第14张图片
    Numpy数组_第15张图片
    Numpy数组_第16张图片
  • 总结:copy()方法会重新生成一个新的数组。

生成固定范围的数组:

np.linspace(start, stop, num, endpoint, retstep, dtype)
  • start 序列的起始值
  • stop 序列的终止值
  • 如果endpoint为true,该值包含于序列中
  • num要生成的等间隔样例数量,默认为50
  • endpoint序列中是否baohanstop值,默认为true
  • retstep如果为true,返回样例
  • 以及连续数字之间的步长
  • dtype输出ndarray的数据类型
  • 其它还有
    • numpy.arange(start, stop, step, dtype)
    • numpy.logspace(start, stop, num, endpoint, base, dtype)
      Numpy数组_第17张图片
      Numpy数组_第18张图片
总结:

生成数组的方法

  • 生成0和1
    • np.zeros(shape)
    • np.ones(shape)
  • 从现有的数组中生成
    • np.array() np.copy() 深拷贝
    • np.asarray() 浅拷贝
  • 生成固定范围的数组
    • np.linspace(0,10,100)
      • [0,10] 等距离
    • np.aragne(a,b,c)
      • range(a,b,c)
        • [a,b) c是步长 [表示包含,)表示不包含。

生成随机数组:np.random模块

均匀分布:

Numpy数组_第19张图片
在这里插入图片描述

生成随机数组

Numpy数组_第20张图片

  • 可以画图看一下均匀分布的准不准:
    Numpy数组_第21张图片
    Numpy数组_第22张图片

正态分布

Numpy数组_第23张图片
Numpy数组_第24张图片
Numpy数组_第25张图片
Numpy数组_第26张图片
Numpy数组_第27张图片
Numpy数组_第28张图片

画图查看分布情况:

Numpy数组_第29张图片
Numpy数组_第30张图片

总结:

  • 生成随机数组
    • 分布状况 - 直方图
    • (1)均匀分布
      • 每组的可能性相等
    • (2)正态分布
      • 增幅、波动程度、集中程度、稳定性、离散程度
案例:随机生成8只股票2周的交易日涨幅数据。

在这里插入图片描述

获取第一个股票的前3个交易日的涨跌幅数据:

Numpy数组_第31张图片

  • 上面在进行索引的时候第一个表示取行,第二个表示取列。也可以:
    在这里插入图片描述
  • 总结:通过上面这个需求,我们知道了对于一个二维数组我们如何进行索引。
那三维数组如何索引呢?

Numpy数组_第32张图片

  • 0表示取三维数组中的第1个二维数组,2表示取二维数组中的第3个一维数组,1表示取一维数组中的第2个元素。
    在这里插入图片描述
    Numpy数组_第33张图片
数组形状的修改:
  • 需求:让刚才的股票行、日期列反过来,变成日期行,股票列。
    Numpy数组_第34张图片
尝试使用reshape()进行变换:

Numpy数组_第35张图片
Numpy数组_第36张图片

  • 提示:reshape有返回值,可以使用变量进行接收,不会对原数组进行修改。
  • 下面是通过对比这两次的数据:
    Numpy数组_第37张图片
  • 总结:我们发现reshape()可以改变数组的形状,但并不是行列互换,而是将数据进行展平,然后再重新进行划分形状。
  • 在进行reshape()的时候还可以指定成-1:
    在这里插入图片描述
  • 下面的-1表示自动计算:我规定列为2列,那行是多少行呢?指定成-1表示自动计算出多少行。
    Numpy数组_第38张图片
尝试使用resize()进行变换:

Numpy数组_第39张图片

  • 上面的代码运行以后,我们发现并没有返回新的数据,而是在原数据上进行修改的。
    Numpy数组_第40张图片
  • 再来对比这两次的数据:
    Numpy数组_第41张图片
  • 总结:我们发现resize()并不是行列互换,而是将数据进行展平,然后再重新进行划分形状。
尝试使用T进行变换:

Numpy数组_第42张图片

  • 再来对比两次的数据:
    Numpy数组_第43张图片

总结:

形状修改

  • ndarray.reshape(shape)返回新的ndarray,原始数据没有发生改变。
  • ndarray.resize(shape)没有返回值,对原始的ndarray进行了修改
  • ndarray.T 转置 行变成列,列变成行
类型修改:

Numpy数组_第44张图片
Numpy数组_第45张图片
Numpy数组_第46张图片
Numpy数组_第47张图片
在这里插入图片描述

  • 将类型修改成int32:
    Numpy数组_第48张图片
  • 将类型修改成int64:
    Numpy数组_第49张图片
    Numpy数组_第50张图片
    Numpy数组_第51张图片
  • 上面的提示信息为:反对使用tostring(),建议使用tobytes()。
    Numpy数组_第52张图片
  • 提示:如果需要将数据序列化到本地,需要先tostring()或是tobytes(),这样就可以写入到本地了。
数组去重:

ndarray.unique():
Numpy数组_第53张图片
在这里插入图片描述
在这里插入图片描述

  • 也可以使用flatten()先展平,也就是变成一维的,再使用set()集合进行去重,然后再转换为ndarray类型即可:
    Numpy数组_第54张图片
    Numpy数组_第55张图片
    Numpy数组_第56张图片

你可能感兴趣的:(笔记,numpy)