‘’'NumPy:数组和矢量计算
NumPy是Python数值计算最重要的基础包。
部分功能:
- ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
- 用于对整组数据进行快速运算和标准化数学函数
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具
- 线性代数,随机数生成以及傅里叶级数变换功能。
- 用于集成由C,C++,Fortran等语言编写代码。
‘’’
‘’’ - NumPy是在一个连续的内存中存储数据,独立于其他Python内置对象。NumPy的C语言的算法库可以操作内存
- NumPy可以在整个数组上执行复杂的计算,而不需要Python得for循环
‘’’
import numpy as np
'''当然from numpy as np也是可行的但是numpy的命名空间很大不建议这么做'''
my_arr = np.arange(1000000)
my_list = list(range(1000000))
get_ipython().run_line_magic('time', 'for _ in range(10): my_arr2 = my_arr*2')
get_ipython().run_line_magic('time', 'for _ in range(10):my_list2=my_list*2')
data = np.random.randn(2, 3)
print(type(data))
print(data.shape)
print(data.dtype)
'''ndarry是一个通用的同构数据容器多维容器也就是说,其中的所有元素必须是相同类型,每个数组都有一个shape
(一个表示数组维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)
'''
'''精通面向数组的编程和思维是成为Python科学计算牛人的一大关键步骤
数组,NumPy,ndarray指的是同一个东西,即ndarray对象。
'''
创建ndarray
- 通过使用array函数进行创建,他接受一切序列型的对象,然后产生一个新的含有传入数据的NumPy数组。
- 嵌套作业(比如一组等长列表组成的列表)将会被转化为一个多维数组。
- 通过ones和zeros分别创建指定长度或形状的全0或则全1数组。函数的参数有两个分别控制行数和列数
- empty可以创建一个没有集体任何值得数组。(即申请内存空间而没有初始值)。
(认为np.empty会返回全0数组的想法是不安全的,很多情况下他返回的都是一些未初始化的垃圾值)。
np.empty((1,3,2))
输出结果为:
array([[[0.31536043, 0.5527005 ],
[0.81452249, 0.69915214],
[0.54877223, 1.42550797]]])
数组创键函数。由于NumPy关注的是数字计算,因此,如果没有特定指定,数据类型基本都是float64
函数 | 说明 |
---|---|
array | 将输入数据(列表,元组,数组或其他序列类型)转换为ndarray。要么推断出dtype,要么特别指定dtype。默认直接复制输入数据 |
asarray | 将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制了 |
arange | 类似内置的range但返回的是一个ndarray而不是列表 |
ones | 根据指定的形状和dtype创建一个全1数组 |
zeros | 类似于ones产生值为零 |
empty | 创建新数组,只分配内存空间但不填从值 |
full | 用fill value中的所有值,根据指定的形状和dtype创建一个数组 |
eye | 创建一个正方的N×N单位矩阵 |
ndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。
arr1 = np.array([1,2,3],dtype = np.float64)
整数被转化为浮点数,如果将浮点数转化为整数,则小数部分会被删除。
arr = np.array([3.7,-1.2,-2.6,0.5,12.9,10.0])
arr.astype(np.int32)
输出将结果为:
array([ 3, -1, -2, 0, 12, 10])
如果某字符串数组表示的全是数字,也可以用astype将其转换为数字形式:
string = np.array(['1.25','-9.6','42.'])
string.astype(float)
输出结果为:
array([1.25,-9.6,42.])
注意:此处用到的是floatNumPy会将Python类型映射到等价的dtype上。
empty_uint32 = np.empty(8, dtype='u4')
输出结果为:
array([4237857568, 32763, 4237857696, 32763, 4237857824,
32763, 4237857952, 32763], dtype=uint32)
笔记:调用astype总会创建一个新的数组(一个数据的备份)即使新的dtype与旧的dtype相同。