2019_8_20 Numpy学习

Numpy (Numerical Python)

核心是N dimensional array — ndarray。
Ndarray对象是用于存放同类型元素的多维数组。每一个数组都有一个shape和一个dtype。
从图中我们可以看出ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。
这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。
Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
使用Numpy中的arange方法快速的新建一个数组:

import numpy as np
a = np.arange(5)

创建一个 ndarray 只需调用 NumPy 的 array 函数即可:他接受一切序列性的对象(包括其他数组),然后产生一个新的数组。

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object	数组或嵌套的数列 [1,2,3] 或 [ [1,2],[3,4] ]
dtype	数组元素的数据类型,可选 比如说可以选择complex
copy	对象是否需要复制,可选
order	创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok	默认返回一个与基类类型一致的数组
ndmin	指定生成数组的最小维度 (暂时不太懂)

创建多维数组的方法是:

1.import numpy as np
2.b = np.array([np.arange(6),np.arange(6)])

Numpy数据类型:
numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。下表列举了常用 NumPy 基本类型。

numpy 的数值类型实际上是 dtype 对象的实例

dtype

dtype是Numpy如此强大和灵活的原因之一

    import numpy as np 
    # 使用标量类型
    dt = np.dtype(np.int32) 
    print(dt)
    int32

    dt = np.dtype('i4')

	int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替

字节顺序是通过对数据类型预先设定"<“或”>“来决定的。”<“意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。”>"意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)。

import numpy as np # 字节顺序标注 dt = np.dtype('<i4') print(dt)
输出结果为:
int32

# 首先创建结构化数据类型
 import numpy as np 
dt = np.dtype([('age',np.int8)])
 print(dt)
[('age', 'i1')]

# 将数据类型应用于 ndarray 对象 
import numpy as np 
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a)
[(10,) (20,) (30,)]
import numpy as np 
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
 print(student)
[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]

利用astype方法显式的转换dtype
Arr = np.array([1,2,3])
NewArr = Arr.astype(np.float64)

如果浮点数转化为整数,那么小数部分将会被截断。
如果字符串数组表示的诠释数字,也可以用astype将其转化为数值模式。

向量与向量之间

1.加法 np.add(a,b) 或 a+b
2.减法np.subtract(a,b) 或 a-b
3.乘法(X乘)np.multiply(a,b) 或 a * b
4.乘法(点乘)np.dot(a,b)
5.除法np.divide(a,b) 或 a/b
向量与标量之间
1.加法a +1
2.减法a-1
3.乘法a*2
4.除法a/2
5.求余a%2
6.转置a.T
import numpy as np
import numpy.linalg as lg
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
In:lg.inv(a)

数组切片:

 My_Array[start:end:step]
 Array[::-1] 是进行反转的。
Array[:]选区所有元素
多维数组可以这样:array[:][:]
 当把一个标量值赋值给一个切片时,如arr[5:8] = 12 该值会自动传播(也就是广播机制,broadcasting)到整个选区。
Numpy的切片是原始数组的视图,这意味着数据不会被复制,仕途上的任何修改都会直接反映到原数组上。(surprising to see this, but ... uhmm, it’s reasonable)
如果想要的是副本,那么要这样:arr[5:8].copy()
对于多维数组元素的访问,有两种:
1.arr[0][2] (obvious it’s not convenient!)
2.Arr[0,2]  better!

布尔型索引:(excellent)p106

利用==,!= , - , &, | 之类的布尔算术运算符来选取其中的数据
Data【】 括号中的内容可以是布尔数组,可以是判断式
花式索引(fancy indexing)这个....下次学

通用函数:

是一种执行元素级运算的函数,你可以将其看做简单函数的矢量化包装器。
比如:
np.sqrt(arr) 
Np.exp(arr)

在这里插入图片描述
在这里插入图片描述

利用数组进行数据处理 112

Numpy.where 是 x if condition else y的矢量化版本 112

数组常用操作:

reshape()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Ndarray有一个属性是ndim,显示维数

关于dtype的创建,如果没有指定,np.array会尝试为新建的这个数组推断出一个比较合适的数据类型。一般来说,由于关注的是数值计算,数据类型基本上都是float64
Np.zeros()和ones()分别可以创建指定长度或形状的全0或全1数组,只需传入一个代表形状的元组即可。

在这里插入图片描述

数组统计方法

在这里插入图片描述

用于布尔型数据的方法:

在这里插入图片描述

在这里插入图片描述

排序:

在这里插入图片描述
多维数组也可以在任意一个轴向上进行排序,只需要将轴编号传给sort即可。
在这里插入图片描述
以上是就地排序,就地排序会修改数组本身。
顶级方法 np.sort 返回的是 数组的已排序副本

唯一化:np.unique(names) 用于排除数组中的重复值,并返回已排序的结果。
在这里插入图片描述

用于数组的文件输入输出 117

线性代数

1.X.dot(Y)
2.Numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西

在这里插入图片描述

随机数生成

Numpy.random模块对python内置的random进行了补充,增加了一些高效生成多种概率分布的样本值的函数。

在这里插入图片描述
在这里插入图片描述

Np.Random.randint(m,n,size=?) 经过尝试:
1.Np.Random.ranint(0,2,size=100) 产生一个一维的数组,元素是0或1
2.Np.Random.ranint(0,2,size=(100,50))产生一个二维的,shape是(100,50)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值