NumPy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。
这是因为:
NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,NumPy数组使用的内存更少。
NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。
接下来我们通过一组实例来了解Numpy算法的优势
import numpy as np
my_arr = np.arange(1000000)my_list = list(range(1000000))
%time for _ in range(10): my_arr2 = my_arr * 2
out: Wall time: 28.1 ms
%time for _ in range(10): my_list2 = [x * 2 for x in my_list]
out: Wall time: 1.06 ms
Numpy的多维数组 -- ndarray
NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。
要明白Python是如何利用与标量值类似的语法进行批次计算,我先引入NumPy,然后生成一个包含随机数据的小数组:
import numpy as np
data = np.random.randn(2,3)data
out:
array([[-0.14098006, -4.19075358, -1.19162879],
[-1.29808759, 0.04365887, 0.81590587]])
然后进行数学运算
data * 10
out:
array([[ -1.40980064, -41.9075358 , -11.91628791],
[-12.98087592, 0.43658872, 8.15905871]])
data + data
out:
array([[-0.28196013, -8.38150716, -2.38325758],
[-2.59617518, 0.08731774, 1.63181174]])
第一个例子中,所有的元素都乘以10。第二个例子中,每个元素都与自身相加。
笔记:在本章及全书中,我会使用标准的NumPy惯用法import numpy as np。你当然也可以在代码中使用from numpy import *,但不建议这么做。numpy的命名空间很大,包含许多函数,其中一些的名字与Python的内置函数重名(比如min和max)。
ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象):
data.shape
out:
(2, 3)
data.dtype
out:
dtype('float64')
本系列内容将会介绍NumPy数组的基本用法,这足以满足后续内容的应用,虽然大多数数据分析工作不需要深入理解NumPy,但是精通面向数组的编程和思维方式是成为Python科学计算牛人的一大关键步骤。
下期我们将分享,如何创建一个多维数组ndarry。如果喜欢,请点赞收藏,您的支持是我最大的动力!一起加油!