标签:
Numpy:
numpy提供两种基本的对象:ndarray和ufunc,ndarray是存储单一数据类型的多为数组,ufunc是能够对数组进行操作的函数。
创建数组:
a = numpy.array([1, 2, 3, 4])
b = np.array([[1, 2, 3, 4], [4, 5, 6, 7]])
数组的形状可以通过其shape属性获得,它是一个描述数组各个轴长度的元组:
1 a.shape 2 # 结果: (4,) 3 b.shape 4 # 结果: (2, 4)
在保持数组元素个数不变的情况下,可以通过改变数组shape属性,改变数组每个轴的大小:(数组元素在内存中的位置不变)
1 b.shape = 4,2 2 #结果 3 #array([[1, 2], 4 # [3, 4], 5 # [4, 5], 6 # [6, 7]])
当设置某个轴的元素个数为-1时,将自动计算此轴的长度。使用reshape()方法可以创建指定形状的新数组,原数组保持不变,新数组和原数组是共享存储空间的,修改会相互影响:
1 c = b.reshape(2, 4) 2 #结果 3 #array([[1, 2, 3, 4], 4 # [4, 5, 6, 7]])
数组元素的类型可以通过dtype属性获得:
c.dtype #结果 # dtype(‘int64‘)
可以用dtype参数在创建数组时指定元素类型,float是64bit的双精度浮点类型,complex是128bit的双精度复数类型:
1 numpy.array([1,2,3,4], dtype=np.float)
Numpy的完整的类型列表存储在typeDict字典中,可以将其转换为集合来查看:
{numpy.bool_,
numpy.object_,
numpy.string_,
numpy.unicode_,
numpy.void,
numpy.int8,
numpy.int16,
numpy.int32,
numpy.int64,
numpy.int64,
numpy.uint8,
numpy.uint16,
numpy.uint32,
numpy.uint64,
numpy.uint64,
numpy.float16,
numpy.float32,
numpy.float64,
numpy.float128,
numpy.datetime64,
numpy.timedelta64,
numpy.complex64,
numpy.complex128,
numpy.complex256}
arange()通过指定开始值,终止值和步长创建表示等差数列的一位数组(不包括终止值):
1 numpy.arange(0, 1, 0.1) 2 #结果 3 #array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
linspace()通过指定开始值,终止值和元素个数创建等差数列的一维数组:
1 numpy.linspace(0, 1, 10) #步长1/9 2 #结果 3 #array([ 0. , 0.11111111, 0.22222222, 0.33333333, #0.44444444, 4 # 0.55555556, 0.66666667, 0.77777778, 0.88888889, 1.]) 5 6 numpy.linspace(0, 1, 10, endpoint=False) #步长1/10 7 #结果 8 #array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
logspace()用于创建等比数列。
zeros(), ones, empty()可以创建指定形状和类型的数组, zeros_like(),ones_like(), empty_like()可以用来创建数组的形状及类型相同, 例如zeros_like(a) 和 zeros(a.shape, a.dtype):
numpy.empty((2, 3), numpy.int) #只分配类型,不初始化 #结果 #array([[-5764607523034234880, 6917537799820997240, 4327211011], # [ 4327214544, 4327214608, 844424930131968]]) numpy.zeros(4, numpy.float) #元素被初始化为0,默认类型numpy.float #结果: #array([ 0., 0., 0., 0.])
frombuffer(),fromstring()和fromfile()等可以从字节序列或文件创建数组:
1 s = "abcdefg" 2 numpy.fromstring(s, dtype=numpy.int8) 3 #结果: 4 #array([ 97, 98, 99, 100, 101, 102, 103], dtype=int8) 5 6 s = "abcdef" 7 numpy.fromstring(s, dtype=numpy.int16) 8 #结果 9 #array([25185, 25699, 26213], dtype=int16) 10 # 其中每个元素等于两个字节表示一个整数,98 * 256 + 97
还可以定义一个从下标计算数值的函数,然后使用fromfunction()创建数组:
def func(i): return i % 4 + 1 numpy.fromfunction(func, (10, )) #结果 #array([ 1., 2., 3., 4., 1., 2., 3., 4., 1., 2.])
存取元素:
a = numpy.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) a[5] #用整数作为下标可以获取数组中的某个元素 #结果:5 a[3 : 5] #用切片作为下标获取数组一部分,不包括a[5] #结果:array([3, 4]) a[2:4]=100,101 #用下标来修改元素的值 #结果:array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
通过切片获取的新数组是原数组的一个数组,它与原始数组共享同一数据空间。
使用整数列表对数组元素进行存取时,得到的新数组不和原始数组共享数据,整数数组和布尔数组类似:
1 x = numpy.arange(10, 1, -1) 2 #array([10, 9, 8, 7, 6, 5, 4, 3, 2]) 3 4 x[[3, 3, 1, 8]] #获取数组中下标为3, 3, 1, 8的四个元素,组成一个新的数组
标签:
原文地址:http://www.cnblogs.com/skycore/p/4952824.html