利用Python进行数据分析

Numpy ndarray: 多维数组对象
ndarray属性
ndarray包含的每一个元素均为相同类型

shape属性:数组每一维度的数量
dtype属性:数组的数据类型
ndim属性:数组的维数
NumPy 数据类型
numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型.

下表给出部分常见的数据类型

类型 类型代码
int, uint8 i1, u1
int16, uint16 i2, u2
int32, uint32 i4, u4
int64, uint64 i8, u8
float16 f2
float32 f4 / f
float64 f2 / d
bool ?
np.astype可以显式地转换数组的数据类型。使用astype时总是生成一个新的数组,即使你传入的dtype与之前一样:

>>> arr = np.arange(10)
>>> arr.dtype
dtype(‘int32‘)
>>> float_arr = arr.astype(np.float64)
>>> float_arr.dtype
dtype(‘float64‘)
>>> float_arr = arr.astype(‘f8‘)
>>> float_arr.dtype
dtype(‘float64‘)
>>> np.array([‘1.23‘, ‘3.3‘]).astype(‘f4‘)
array([1.23, 3.3 ], dtype=float32)
1
2
生成ndarray
np.array接受任意的序列型对象(包括其他数组),生成一个新的Numpy数组。如不显示指明数据类型,将自动推断。
>>> arr1 = np.array(range(10))
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> arr2 = np.array([[1, 2], [3, 4]])
>>> arr2
array([[1, 2],
[3, 4]])
>>> arr2 = np.array([[1, 2], [3, 4]], dtype=np.float64)
>>> arr2
array([[1., 2.],
[3., 4.]])

np.arange:Python内建函数range的数组版
np.linspace:与np.arange不同,np.linspace的第三个参数为要创建的数据点的数量
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> np.arange(0, 12, 4)
array([0, 4, 8])
>>> np.linspace(0, 12, 4)
array([ 0., 4., 8., 12.])
np.asarray:将输入转换为ndarray,但如果输入已经是ndarray则不再复制
>>> a
array([[0, 1, 0, 1],
[0, 0, 1, 1],
[0, 1, 0, 1],
[0, 1, 0, 0]])
>>> b=np.asarray(a)
>>> b
array([[0, 1, 0, 1],
[0, 0, 1, 1],
[0, 1, 0, 1],
[0, 1, 0, 0]])
>>> b[0,0]=1
>>> a
array([[1, 1, 0, 1],
[0, 0, 1, 1],
[0, 1, 0, 1],
[0, 1, 0, 0]])
>>> np.asarray([1,2])
array([1, 2])
1
2
np.ones:根据给定形状和数据类型生成全1数组
np.zeros:根据给定形状和数据类型生成全0数组
np.full:根据给定形状和数据类型生成指定数值的数组
>>> np.asarray([1,2])
array([1, 2])
>>> np.ones(10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> np.ones((3, 6))
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])
>>> np.full(5, 7)
array([7, 7, 7, 7, 7])
>>> np.full((2,2), 7)
array([[7, 7],
[7, 7]])
1
2
3
np.ones_like:生成与所给数组形状一样的全1数组
np.zeros_like:生成与所给数组形状一样的全0数组
np.zeros_like:生成与所给数组形状一样但内容是指定数值的数组
>>> np.ones_like(a)
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
>>> np.full_like(a, 9)
array([[9, 9, 9, 9],
[9, 9, 9, 9],
[9, 9, 9, 9],
[9, 9, 9, 9]])
1
2
3
np.eye / np.identity: 生成N * N的单位矩阵
>>> np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>> np.identity(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
Numpy数组算术
任何在两个等尺寸数组之间的算术操作都应用了逐元素操作的方式
>>> arr = np.arange(10).reshape(2,5)
>>> arr
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> arr * arr
array([[ 0, 1, 4, 9, 16],
[25, 36, 49, 64, 81]])
>>> arr - arr
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
1
2
3
带有标量计算的算术操作,会把计算参数传递给数组的每一个元素
>>> arr * 8
array([[ 0, 8, 16, 24, 32],
[40, 48, 56, 64, 72]])
>>> arr ** 0.5
array([[0. , 1. , 1.41421356, 1.73205081, 2. ],
[2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]])
同尺寸数组之间的比较,会产生一个布尔值数组
>>> arr1
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> arr2
array([[0, 1, 3, 4, 4],
[5, 6, 7, 7, 7]])
>>> arr1 == arr2
array([[ True, True, False, False, True],
[ True, True, True, False, False]])
基础索引与切片
区别于Python内置列表,数组的切片是原数组的视图,任何对视图的修改都会反映到原数组上。如果想要得到数组切片的拷贝而非视图,则要显示复制数组,如arr[5 : 8].copy()
>>> arr = np.arange(10)
>>> arr[5: 8] = 12
>>> arr
array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
>>> arr_slice = arr[5: 8]
>>> arr_slice
array([12, 12, 12])
>>> arr_slice[1] = 10
>>> arr
array([ 0, 1, 2, 3, 4, 12, 10, 12, 8, 9])
>>> arr_slice[:] = 13
>>> arr
array([ 0, 1, 2, 3, 4, 13, 13, 13, 8, 9])
数组索引选择元素
>>> arr
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> arr[0][2]
2
>>> arr[0, 2]
2
>>> arr[0] = 5
>>> arr
array([[5, 5, 5, 5, 5],
[5, 6, 7, 8, 9]])
数组的切片索引

相关推荐