numpy知识点(与python比较)

杂七杂八

np.sum(axis=1,keepdims = True) 保持原有维度,不然就会默认得到秩为一的数组(即去掉维度为1的那个维度了)

assert(a.shape == (1,2)) 正确则跳过,错误则输出assert error

使用 a.tolist() 将array转化为list,如果只有一个元素(且只有一个维度)则转化为一个标量

np.squeeze()可以将array中维度为1的维度去掉(理解为去括号)

reshape(-1,1)代表转为1列 (axis = 1 )
reshape(-1,2)代表转为2列(axis = 1)
reshape(2,-1)代表转化为2行 (axis = 0) #The “-1” makes reshape flatten the remaining dimensions
所以理解为全部拆开后,针对某个维度平铺开成几组

利用tolist()将数组转换为列表
利用np.mat()将数组转换为矩阵
利用np.array()转换为数组

乘的区别
1.np.dot
对于秩为1的数组,执行对应位置相乘,然后再相加;
对于秩不为1的二维数组,执行矩阵乘法运算;超过二维的可以参考numpy库介绍。

2.np.multiply
数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致

3.*
对数组执行对应位置相乘
对矩阵执行矩阵乘法运算(必须为matrix类型)

将多维数组转换为一维数组的功能
ravel():如果没有必要,不会产生源数据的副本
flatten():返回源数据的副本
squeeze():只能对维数为1的维度降维
reshape(-1)也可以“拉平”多维数组

numpy和python区别

python 的灵活性及其弊端

  • 优点一:简洁灵活

    • 变量不用预定义类型
    • 变量类型可变
    • 列表字典等数据结构功能强大——无论是列表中的元素还是字典中的值都可以是任意类型的变量,甚至可以是另外一个复杂的数据类型
  • 缺点

    • 为了满足这种灵活性与可变性,python的变量底层本质上是指针,而并不是直接存储数据,这种相对间接和复杂的变量实现必然导致变量的内存开销增大,并且变量运算的效率下降。如果一个程序只有少量的变量(运算单元),并且变量之间的运算并不频繁,那么python对于这样的程序来说是完美的语言。但是如果一个程序有非常多的变量(运算单元),变量与变量之间的运算非常频繁,那么原生的python语言则显然不是很好的选择
    • 数据分析运算中,本质上数据记录的行数与列数决定了运算单元的数量,并且运算的频繁程度也会呈指数增长。

numpy是为克服上述的缺点而生的

  • array与list的比较:

    • 元素类型必须一致——list的元素可以不一致
    • 元素类型转化顺序:整数——浮点数——(bool——)字符串
    • 更严格的定义带来的就是当拥有大量数据和运算的时候,其运算单元的内存占用以及运算效率会得到了显著的提升
  • 作为解释性语言的python循环效率必然低下

  • 所有语言都需要翻译成机器语言才能运行,c语言程序每次运行前都需要编译,这个编译过程就是把程序整体翻译成机器语言的过程。

  • python不用编译,并不是因为它不用翻译,而是因为它是在运行程序的时候,翻译一行执行一行。相比批量翻译然后执行,这种翻译一行执行一行的过程必然效率低下

  • 使用nump的通用函数来代替python的循环。

    • numpy解决循环效率的思路很简单,就是用矩阵(数组)的运算函数来代替python的循环,而在numpy里,矩阵运算的函数底层都是用c或是fortran这样高效的语言来实现的。
    • 在使用了numpy的运算函数之后,关键步骤的执行效率提高了接近几十倍;并且变量在内存中的占用方面,array的内存占用也只有list的二分之一不到。

切片,拼接,分裂与变形

  • 切片
    array给具体取数a[3,4]赋值不会改变原数组(副本),但是切片a[:,1]会(视图),想要不改变就用np.copy(返回副本)
  • 拼接
    np.concatenate()
  • 分裂
    np.split()
  • 变形
    a.reshape()

基本运算

运算符

符号 np表示
- np.substract
+ np.add
/ np.divide
% np.mod
** np.power
// np.floor_divide

函数
np.absolute
np.sin
np.cox
np.tan
np.exp
统计函数
np.sum min max mean std var
np.prod 累乘
argmax argmin
np.percentile(x,50) 中位数
数组运算和矩阵运算是有区别的

  • 同纬度时
  • 不同维度时(广播机制)
  • 多维数组的运算
    一维一维的复制!

矩阵运算与层次分析法

矩阵创建
np.arrange()
np.ones(())
np.zeros(())
np.eye(3)


a.dot() 点乘
np.linalg.dot(a) 叉乘(行列式)

特征求解
k,j = np.linalg.eig(a)
k 特征值
j 特征向量

求逆
np.linalg.inv(a)

层次分析法
两两打分
打分矩阵(满足一致性)
特征求解
找最大特征值,归一化,对应的值为权重
np.dot(a,B) = a.dot(B)

数据的过滤

np.where
np.delete

相关性

np.cov(a,b)(或np.cov(A)则是对行求协方差)协方差矩阵
np.corrcoef() (同上)皮尔逊相关系数矩阵

协同过滤算法

你可能感兴趣的:(数据分析)