为什么要有Numpy?
标准的python使用list来保存一组值,用来当作数组使用,但此时里面存放的是指针,则重结构用于做数值运算比较浪费内存和CPU计算时间。
此外python还有一个array模块,它直接保存数值,但不支持多维也没有各种运算函数,因此也不适合做数值运算。
Numpy由此诞生,它提供了两种基本对象:narray(N-dimensional array object)和ufunc(universal function object)。narray是存储单一数据类型的多维数据,ufunc是对数组进行处理的函数。
引入:
import numpy as np
创建:
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
数组的大小可以通过其shape属性获得:
a.shape
(4,)
可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。
c=np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
c.shape = 4,3
c
array([[ 1, 2, 3],
[ 4, 4, 5],
[ 6, 7, 7],
[ 8, 9, 10]])
当某个轴元素为-1时,将根据数据元素的个数自动计算此轴的长度。
使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变。两者共享数据存储内存区域,修改其中任意一个数组的元素都会同时修改另外一个数组的内容。
数组的元素可以通过dtype来获得,也可以在创建数组的时候通过dtype参数指定元素类型:
np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float)
arange函数:
类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值:
np.arange(0,1,0.1)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
linspace函数:
通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,创建的是等差序列,缺省设置是包括终值:
np.linspace(0, 1, 12)
array([ 0. , 0.09090909, 0.18181818, 0.27272727, 0.36363636,
0.45454545, 0.54545455, 0.63636364, 0.72727273, 0.81818182,
0.90909091, 1. ])