数据分析 numpy数组_06 字节交换,副本和视图、NumPy 矩阵库(Matrix)、NumPy IO 、

NumPy 字节交换

  大端模式:指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。

  小端模式:指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

  numpy.ndarray.byteswap() 函数将 ndarray 中每个元素中的字节进行大小端转换

  

NumPy 副本和视图

  副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置。

  视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置???

视图一般发生在:

  • 1、numpy 的切片操作a[...:2],使用切片创建视图修改数据会影响到原始数组,但是切片的id和原始数组的id是不一样的;numpy数组操作中的numpy.ravel(),
  • 2、调用 ndarray 的 view() 函数产生一个视图:numpy.ndarray.view()该方法创建的新数组的维数更改不会更改原始数据的维数。不是前后矛盾了吗?

副本一般发生在:

  • Python 序列的切片操作,调用deepCopy()函数。
  • 调用 ndarray 的 copy() 函数产生一个副本,对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。

赋值  

  a = b,访问a是使用原始数组b的相同id()来访问,b数组的任何变化都反映在a数组上。

NumPy 矩阵库(Matrix)

  import numpy.matlib中的函数;matlib.empty()、numpy.matlib.zeros()、numpy.matlib.ones()、

  numpy.matlib.eye(n, M,k, dtype)返回一个矩阵,对角线元素为 1,其他位置为零。

  numpy.matlib.identity(5, dtype = float),给定大小的单位矩阵,单位矩阵是个方阵

  numpy.matlib.rand(3, 3) 函数创建一个给定大小的矩阵,数据是随机填充  

实例讲解numpy.matlib.eye()中的属性 k

import numpy.matlib
import numpy as np

print(np.matlib.eye(n=3, M=4, k=1, dtype=float))

NumPy 线性代数

NumPy 提供了线性代数函数库 linalg。

函数描述
dot 两个数组的点积,即元素对应相乘。一维对应内机inner;二维对应矩阵的乘法运算
vdot 两个向量的点积,展开乘积的和
inner 两个数组的内积,‘行行相乘’
matmul 两个数组的矩阵积,二维数组就是矩阵的乘法运算,一维和二维,三维和二维通过广播实现矩阵的乘法。
determinant 数组的行列式,numpy.linalg.det()计算输入矩阵的行列式。
solve 求解线性矩阵方程,numpy.linalg.solve() 函数给出了矩阵形式的线性方程的解。
inv 计算矩阵的乘法逆矩阵,numpy.linalg.inv() 函数计算矩阵的乘法逆矩阵。

笔记:

  1、numpy.matmul 函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,参数为N维,该参数是一些矩阵(最后两个维数为矩阵维数)的stack,也就是进行矩阵运算运算,并进行相应广播(四维是怎么样的?????)。另一方面,如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,并在乘法之后被去除。对于二维数组,它就是矩阵乘法。

  2、NumPy 中对 array 使用 multiply()* 操作符并不是矩阵乘法,两个是‘element-wise’,正确的用法是 dot()matmul(),或者对 matrix 使用 *

  3、nxn维矩阵的行列式怎么求?怎么由定义的余子式,代数余子式,利用定义任意一行(列)中的每一个元素和其代数余子式的乘积的和就是nxn维矩阵的行列式推出其他计算方法的来源呢???

NumPy IO 

常用的 IO 函数有:

  • load() 和 save(file, arr, allow_pickle=True, fix_imports=True) 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。
  • savze(file, *args, **kwds) 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中。
  • loadtxt(FILENAME, dtype=int, delimiter=' ') 和 savetxt(FILENAME, a, fmt="%d", delimiter=",") 函数处理正常的文本文件(.txt 等)
posted @ 2019-12-09 19:10  石斛  阅读(263)  评论(0编辑  收藏  举报