要点
NumPy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。
NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列, NumPy数组使用的内存更少。
NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。
性能对比
基于NumPy的算法要比纯Python快10到100倍(甚至更快),并且使用的内存更少。
import numpy as np
%timeit my_arr = np.arange(1000000)
%timeit my_list = list(range(1000000))
性能对比
ndarray
NumPy的ndarray:一种多维数组对象。
NumPy重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。
import numpy as np
data = np.random.randn(2, 3)
array
ndarray是一个通用的同构数据多维容器,所有元素必须是相同类型的
# 取维度大小
data.shape
# 取数据数据类型
data.dtype
多维数组容器
创建ndarray(强转列表)
data1 = [5,8.4,9,233]
arr = np.array(data1)
创建ndarray
嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组
data2 = [[1,2,3,4],[5,6,7,8]]
arr1 = np.array(data2)
# 取维度
arr1.ndim
arr1.shape
arr1.dtype
多维数组
zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。np.empty返回的都是一些未初始化的垃圾值。
np.zeros(10)
np.ones((3,6))
np.empty((2,3,2))
np.arange(15)
基本函数
函数 | 说明 |
---|---|
array | 将输入数据(列表、元组、数组或其它序列类型)转换为ndarry。推断除dtype或特别指定dtype。默认直接赋值输入数据 |
asarry | 将输入转化为ndarray,如果输入本身是一个ndarray就不在复制 |
arange | 类似于内置的range,但返回的是一个ndarray而非list |
ones,ones_like | 根据指定的形状和dtype创建一个全一数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全一数组 |
zeros,zeros_like | 类似于ones和ones_like,只不过产生的是全0数组而已 |
empty,empty_like | 创建新数组,只分配内存空间但不填充任何值 |
full,full_like | 用full value中的所有值,根据指定的形状和dtype创建一个数组。full_like使用另一个数组,用相同的形状和dtype创建 |
eye,identity | 创建一个正方的N*N单位矩阵(对角线为一,其余为零) |
网友评论