码迷,mamicode.com
首页 > 编程语言 > 详细

[Machine Learning]Python机器学习库

时间:2015-11-10 15:44:22      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

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的四个元素,组成一个新的数组

 

[Machine Learning]Python机器学习库

标签:

原文地址:http://www.cnblogs.com/skycore/p/4952824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!