Python数据分析-Numpy数值计算-1-ndarray创建与索引

1.创建

(1)ndarray数据类型

bool

inti(由所在平台决定其精度的整数)、int8、int16、int32、int64(有符号整数)

unit8、unit16、unit32、unit64(无符号整数)

float16、float32、float64/float(浮点数)

complex64(复数,分别用两个32位浮点数表示实部和虚部)、complex128/complex(用两个64位浮点数表示实部和虚部)

同一个ndarray中所有元素类型必须一致。

实数数据类型之间的数据转换如下:

import numpy as np
np.float64(42)
np.int8(42.0)
np.bool(42)
np.int(True)

(2)ndarray创建

1)array函数

np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0,
      like=None)

object:接收array,list,tuple等。

dtype:表示创建的数组的类型,默认值为保存对象所需的最小字节数的数据类型。

创建一维与二维数组:

np.array([1,2,3,4])
>array([1, 2, 3, 4])
np.array([[1,2,3,4],[5,6,7,8]])
>array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

ndarray的常用属性如下:

arr=np.array([[1,2,3,4],[5,6,7,8]])
arr.ndim#维数
>2
arr.shape#尺寸
>(2, 4)
arr.size#元素总数
>8
arr.dtype#元素类型
>dtype('int32')
arr.itemsize#每个元素的大小,以字节为单位(int32具有32/8=4个字节)
>4

2)其他创建函数

使用arange(开始值,终止值,步长)创建等差数列:

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(开始值,终止值,元素个数)创建等差数列:

np.linspace(0,1,10)
>array([0.        , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
       0.55555556, 0.66666667, 0.77777778, 0.88888889, 1.        ])

使用logspace(开始值,终止值,元素个数)创建等比数列:

np.logspace(1,100,5)
>array([1.00000000e+001, 5.62341325e+025, 3.16227766e+050, 1.77827941e+075,
       1.00000000e+100])

使用zeros((行数,列数))创建值全为零的矩阵:

np.zeros((2,3))
>array([[0., 0., 0.],
       [0., 0., 0.]])

使用eye(对角线元素个数)创建单位矩阵:

np.eye(3)
>array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

使用diag(对角线元素)创建对角矩阵:

np.diag([1,2,3,4])
>array([[1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [0, 0, 0, 4]])

使用ones(矩阵维数)创建全为1的矩阵:

np.ones((2,3))
>array([[1., 1., 1.],
       [1., 1., 1.]])

(3)随机数

与生成随机数相关的函数全在np.random模块中:

seed:随机数种子

permutation:返回一个序列的随机排列

shuffle:对一个序列进行随机排列

random:产生0-1的随机浮点数

rand:产生指定形状的随机数ndarray

randint:产生给定上下限范围的随机整数

randn:产生正态分布的随机数

binominal:产生二项分布的随机数

normal:产生正态分布的随机数

beta:产生beta分布的随机数

chisquare:产生卡方分布的随机数

gamma:产生伽马分布的随机数

uniform:产生[0,1)均匀分布的随机数

np.random.random(10)
>array([0.49905372, 0.85914534, 0.01105556, 0.78294205, 0.56929015,
       0.63081794, 0.29417168, 0.80998379, 0.38684665, 0.49672103])
np.random.rand(2,3)
>array([[0.71282353, 0.87641901, 0.85941578],
       [0.74710244, 0.34053078, 0.13364268]])
np.random.randn(2,3)
>array([[ 0.60000428,  0.94897067,  1.20422687],
       [-0.65710487, -0.0812635 , -0.45994949]])
np.random.randint(low=1,high=10,size=[2,3])
>array([[9, 4, 9],
       [9, 8, 9]])

2.索引与切片

(1)一维索引

arr=np.random.random(10)
arr
>array([0.74412323, 0.5186568 , 0.85832988, 0.29784057, 0.83864654,
       0.84512263, 0.77279106, 0.20471927, 0.95401965, 0.67786501])
arr[5]
>0.8451226296662746
arr[3:5]#其实是第四个元素和第五个元素
>array([0.29784057, 0.83864654])
arr[:5]
>array([0.74412323, 0.5186568 , 0.85832988, 0.29784057, 0.83864654])
arr[:-1]#舍弃最后一个
>array([0.74412323, 0.5186568 , 0.85832988, 0.29784057, 0.83864654,
       0.84512263, 0.77279106, 0.20471927, 0.95401965])
arr[2:4]=100#修改元素值
arr
>array([  0.74412323,   0.5186568 , 100.        , 100.        ,
         0.83864654,   0.84512263,   0.77279106,   0.20471927,
         0.95401965,   0.67786501])
arr[1:-1:2]#等差提取
>array([  0.5186568 , 100.        ,   0.84512263,   0.20471927])
arr[5:1:-1]#倒着提取
>array([  0.84512263,   0.83864654, 100.        , 100.        ])

(2)多维索引

多维索引每一个维度都有一个索引,各个索引之间用逗号隔开。

arr=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
arr
>array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
arr[0,2]#第1行,第3列。
>3
arr[1,1:4]#第2行,第2到4列
>array([6, 7, 8])
arr[0:3,1:3]
>array([[ 2,  3],
       [ 6,  7],
       [10, 11]])
arr[:,0:3]#所有行
>array([[ 1,  2,  3],
       [ 5,  6,  7],
       [ 9, 10, 11]])

(3)花式索引

arr=np.array([np.arange(i*4,i*4+4) for i in np.arange(6)])
arr
>array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
arr[[1,5,4,2],[0,3,1,2]]#相当于返回arr坐标为(1,0),(5,3),(4,1),(2,2)的元素
>array([ 4, 23, 17, 10])

利用ix函数将两个一维的整数ndarray转化为方形区域的索引器:

ix函数实际上先对两个一维数组做笛卡尔积,再找到所有笛卡尔积结果所对应的坐标的元素。

arr[np.ix_([1,5,4,2],[0,3,1,2])
>array([[ 4,  7,  5,  6],
       [20, 23, 21, 22],
       [16, 19, 17, 18],
       [ 8, 11,  9, 10]])

上一篇:python数据分析总结一


下一篇:【Python数据分析-7】:Numpy常用操作-Numpy基础与创建