简单介绍
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。
- NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,NumPy数组使用的内存更少。
- NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。
- 基于NumPy的算法要比纯Python快10到100倍(甚至更快),并且使用的内存更少。
功能示例代码
-
ndarray
:一种多维数组对象
ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象):
2. 创建ndarray
-
数据类型
astype()
方法明确地将一个数组从一个dtype转换成另一个dtype
【调用astype总会创建一个新的数组(一个数据的备份),即使新的dtype与旧的dtype相同。】 -
运算
大小相等的数组之间的任何算术运算都会将运算应用到元素级:
-
基本的索引和切片
(1)一维数组
跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上:
(2)高维数组
二维数组的索引方式:轴0作为行,轴1作为列
(3)布尔型索引
常用:将data中的所有负值都设置为0
还有其他的都可以利用
- 数组转置和轴对换
转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)
- 利用np.dot计算矩阵内积:
通用函数
- 利用数组进行数据处理
numpy.where(condition, x, y)
是三元表达式x if condition else y
用于布尔型数组的方法:
- 排序
- 唯一化以及其它的集合逻辑
NumPy提供了一些针对一维ndarray的基本集合运算。最常用的可能要数np.unique了,它用于找出数组中的唯一值并返回已排序的结果:
等价于:
sorted(set(names))
函数np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:
- 用于数组的文件输入输出
np.save
和np.load
是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的:
arr = np.arange(10)
np.save('some_array', arr)
arr_save = np.load('some_array.npy')
通过np.savez可以将多个数组保存到一个未压缩文件中,将数组以关键字参数的形式传入即可:
np.savez('array_archive.npz', a=arr, b=arr2)
arch = np.load('array_archive.npz')
arr2_save = arch['b']
- 线性代数
后面用到在看:
- 伪随机数生成
我们说这些都是伪随机数,是因为它们都是通过算法基于随机数生成器种子,在确定性的条件下生成的。你可以用NumPy的np.random.seed更改随机数生成种子:np.random.seed(1234)