快学numpy01

来源:互联网 发布:windows的uac 编辑:程序博客网 时间:2024/05/16 16:07

博客地址:http://www.fanlegefan.com

文章地址:http://www.fanlegefan.com/index.php/2017/07/02/numpy01/


调用np.array(list)初始化一个数组

a = np.array([1,2,3])print aprint type(a) [1 2 3] <type 'numpy.ndarray'>

访问数据中的元素,并修改数组中的元素

print a[0]a[0]=5print a 1 [5 2 3]

创建多维数组

b = np.array([[1,2,3,4],[4,5,6,7]])print b,type(b) [[1 2 3 4]  [4 5 6 7]] <type 'numpy.ndarray'>

查看array的shape

print b.shapeprint b[1,2] (2L, 4L) 6

调用zeros创建全是0的多维array,zeros接收的参数是一个tuple,例如(2,3)
c = np.zeros((2,3))
print c
print 
print c.shape

[[ 0.  0.  0.]
 [ 0.  0.  0.]]
 
(2L, 3L)
调用ones创建全是1的array

d = np.ones((2,3))print dprintprint d.shape [[ 1.  1.  1.]  [ 1.  1.  1.]]  (2L, 3L)

调用full(tuple,value)定义值全部是相同数字的array

e = np.full((2,3),8)print eprint print type(e) [[8 8 8]  [8 8 8]]  <type 'numpy.ndarray'>

调用eye(value)创建对角array

f = np.eye(3)print f [[ 1.  0.  0.]  [ 0.  1.  0.]  [ 0.  0.  1.]]

创建随机数array

a = np.random.random((3,3))print a [[ 0.83053523  0.00179318  0.30864027]  [ 0.97192834  0.55587498  0.21440927]  [ 0.13428121  0.32882098  0.02335231]]

创建多维空array

a = np.empty((2,3,4))print a [[[  1.55096090e-316   5.10440800e-316   1.54337333e-316   5.10436531e-316]   [  1.93482470e-316   5.10394792e-316   1.54337333e-316   5.10438191e-316]   [  1.93482470e-316   5.10446254e-316   1.54337333e-316   4.83352326e-316]]   [[  1.93482470e-316   5.10436294e-316   1.54337333e-316   5.10436768e-316]   [  1.93482470e-316   5.10437479e-316   1.54337333e-316   5.10443171e-316]   [  1.93482470e-316   5.10442697e-316   1.54337333e-316   5.08083751e-316]]]

创建一个连续数字的array

a = np.arange(12)print aprintprint a.shape [ 0  1  2  3  4  5  6  7  8  9 10 11]  (12L,)

创建指定数据类型的array

a = np.array([1,2,3],dtype=np.float64)print a.dtypeprintprint a float64  [ 1.  2.  3.]

更改array的数据类型,float类型的array装换成int的array的时候,小数部分会被舍弃

int_array = np.array([1,2,3,4])print int_array.dtype,int_arrayfloat_array = int_array.astype(np.float)print float_array.dtype,float_arrayb = np.array([1.2,3.5,9.1])print bc = b.astype(np.int64)print c int32 [1 2 3 4] float64 [ 1.  2.  3.  4.] [ 1.2  3.5  9.1] [1 3 9]

将字符串array转换成数组,失败则抛出异常

a = np.array(["1.2","12","2.3"])b = a.astype(np.float64)print bc = a.astype(dtype=np.float)print c [  1.2  12. 2.3] [  1.2  12. 2.3]

使用其他数组的type作为转换参数

a = np.array([1,2,3,4])b = np.array(["1.2","2.4"])c = b.astype(dtype=b.dtype)print c ['1.2' '2.4']

数组切片

a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])print aprint a.shapeprint a[:,1]b =  a[0:2,1:3]print b [[ 1  2  3  4]  [ 5  6  7  8]  [ 9 10 11 12]] (3L, 4L) [ 2  6 10] [[2 3]  [6 7]]

当数组b是数组a的一个切片,修改b数组的值,a数组的值也会随之改变,因为b只是指向a的一个引用,
如果想修改b的值,但不修改a的值,可以在切片的时候执行复制操作

a = np.array([1,2,3,4,5])b = a[2:4]print bb[0] = 9print bprint ac = a[1:4].copy()c[0]=29print cprint a [3 4] [9 4] [1 2 9 4 5] [29  9  4] [1 2 9 4 5]a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])b = a[0:3,1:3].copy()print b[[ 2  3] [ 6  7] [10 11]]

给定不同维度的index取值

print ab = a[[1,2,1],[0,2,1]]print bprint b.shape [[ 1  2  3  4]  [ 5  6  7  8]  [ 9 10 11 12]] [ 5 11  6] (3L,) b = np.array([1,2,0])print a[np.arange(3),b] [2 7 9]

对数组的每个元素进行加减法操作

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])b = np.array([1,2,0])a[np.arange(3),b]+=10print aa[:,:] -=2print aa  *= 2print[[ 1 12  3  4]  [ 5  6 17  8]  [19 10 11 12]] [[-1 10  1  2]  [ 3  4 15  6]  [17  8  9 10]] [[-2 20  2  4]  [ 6  8 30 12]  [34 16 18 20]]

对数组进行筛选取值

a = np.array([[1,9,3,4], [5,6,1,8], [9,2,1,12]])index = (a>4)print indexprint a[index],a[index].shapeprint a[a>4] [[False  True False False]  [ True  True False  True]  [ True False False  True]] [ 9  5  6  8  9 12] (6L,) [ 9  5  6  8  9 12]

初始化的时候指定数组类型

x = np.array([1,2])y = np.array([1.2,1.4])z = np.array([1,2,3,4,5],dtype=np.float64)print x.dtype,y.dtype,z.dtype int32 float64 float64

数组运算
数组加法减法

a = np.array([1,2,3,5])b = np.array([3,2,2,5])print a.sum()print a + bprint np.add(a,b)print np.add(1,a)print a -bprint np.subtract(a,b) 11 [ 4  4  5 10] [ 4  4  5 10] [2 3 4 6] [-2  0  1  0] [-2  0  1  0]

数组元素逐个相乘,相除

a = np.array([1,2,3,5])b = np.array([3,2,2,5])print a*7print np.multiply(7,a)print a*bprint np.multiply(a,b)print a/2print b/aprint np.divide(b,a) [ 7 14 21 35] [ 7 14 21 35] [ 3  4  6 25] [ 3  4  6 25] [0 1 1 2] [3 1 0 1] [3 1 0 1]

数组平方根

a = np.array([1,2,3,5])print np.sqrt(a) [ 1.    1.41421356  1.73205081  2.23606798]

矩阵乘法,向量内积

a = np.array([[1,2],[3,4]])b = np.array([[3,2],[3,5]])print a.dot(b)print np.dot(a,b)c = np.array([2,3])print a.dot(c)print c.dot(a) [[ 9 12]  [21 26]] [[ 9 12]  [21 26]] [ 8 18] [11 16]