【Python】NumPy基础——ndarry数组对象

NumPy基础

ndarry数组对象

NumPy是Python的一个高性能科学计算和数据分析基础库,提供了功能强大的多维数组对象ndarray
jupyter notebook快速执行代码的快捷键:鼠标点击选中要指定的代码框,Shift + Enter组合键直接执行代码框中的全部代码。    Alt + Enter组合键执行完代码框中的代码在代码框的下面再添加一个空代码框。

1、创建数组

#引入numpy,并重命名为np,方便使用
import numpy as np

1.1、使用numpy内置的array函数创建数组

#创建一维数组
arr1 = np.array([1,2,3])
print(arr1)

结果:[1 2 3]

#创建二维数组
arr2 = np.array([[1,2,3],[4,5,6]])
print(arr2)

结果:[[1 2 3] [4 5 6]]

1.2、使用arange函数创建数组

#使用arange函数创建包含0到9 十个数字的一维数组

#注意:arange函数返回的数组默认第一个元素是0,结束元素是指定的数值前一个数字9
arr_1 = np.arange(10) 
print(arr_1)

结果:[0 1 2 3 4 5 6 7 8 9]

#通过arange函数设置“开始、结束、步长”三个参数创建包含1到10所有奇数的一维数组

 #从1开始,到10前一位结束,步长为2表示相邻两个元素的差值是2
print(arr_2)
arr_2 = np.arange(1,10,2)

结果:[1 3 5 7 9]

1.3、全0、全1数组

#使用zeros函数创建一个包含10个全0数字的一维数组
z1 = np.zeros(10)
print(z1)

结果:[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

#创建3行4列的二维全0数组
z2 = np.zeros((3,4))
print(z2)

结果:[[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]]

#创建全1数组
o1 = np.ones(5)
print(o1)

结果:[ 1. 1. 1. 1. 1.]

#创建3行4列全1二维数组
o2 = np.ones((3,4))
print(o2)

结果:[[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]]

2、数组的属性方法

#查看数组o2各维度的大小
o2.shape
#运行结果是一个元组(3,4)表示第1维的大小是3(也是就是3行),第2维的大小是4(也就是4列)

结果:(3, 4)

#查看o2第1维的大小(行数)
o2.shape[0]

结果:3

#查看o2第2维的大小(列数)
o2.shape[1]

结果:4

#查看数组中元素类型
o2.dtype

结果:dtype('float64')

#类型转换函数astype,数组元素由float64类型转换成int32类型,并返回一个新的数组o2_1,原数组o2元素类型不变
o2_1 = o2.astype(np.int32)

#o2数组类型不变
o2.dtype

结果:dtype('float64')

#o2_1数组中元素类型为int32
o2_1.dtype

结果:dtype('int32')

#创建字符串类型数组
arr_string = np.array(["12.78","23.15","34.5"])
arr_string.dtype 

结果:dtype('

#将字符串数组转换成浮点类型数组
arr_float = arr_string.astype(np.float64)
print(arr_float)

结果:[ 12.78 23.15 34.5 ]

#float类型数组转换成整型数组,小数部分将会被截断
arr_int = arr_float.astype(np.int32)
print(arr_int)

结果:[12 23 34]

#numpy自动识别元素类型
np.array([1,2,3]).dtype

结果:dtype('int32')

数组的索引与切片

1、一维数组索引与切片
#创建一维数组
arr1d = np.arange(10)
print(arr1d) 

结果:[0 1 2 3 4 5 6 7 8 9]

#数组的索引从0开始,通过索引获取第三个元素
arr1d[2]

结果:2

#切片,左闭右开区间,从索引3开始,直到索引7结束

arr1d[3:8]

结果:array([3, 4, 5, 6, 7])

#数组脚标由右往左是从-1开始,每向左一位脚标数字减1,获取最后一个元素
arr1d[-1] #等价arr1d[9]

结果:9

#将标量赋值给切片,会广播到切片的整个选区
arr1d[3:5] = 10
print(arr1d)

结果:[ 0 1 2 10 10 5 6 7 8 9]

2、二维数组索引与切片

#创建二维数组
arr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(arr2d)

结果:[[ 1  2  3  4]
       [ 5  6  7  8]
       [ 9 10 11 12]]

#第一维脚标(索引值)是0的元素是一个数组
arr2d[0]

结果:array([1, 2, 3, 4])

#第一维脚标(索引值)是1,第二维脚标(索引值)是3的元素,可以理解为获取二维数组中第2行第3列的元素
arr2d[1,3]

结果:8

#二维数组切片

多维数组可以按照维度分为多个轴,以二维数组为例,第一维可以用第0轴“axis=0”表示,第二维可以用第1轴“axis=1”表示

【Python】NumPy基础——ndarry数组对象_第1张图片

#沿着axis=0轴方向的切片

arr2d[:2]

结果:array([[1, 2, 3, 4],
             [5, 6, 7, 8]])

 

#只有冒号表示选取整个轴,取第0轴全部,第1轴从脚标1开始取到3前一位,可以理解为取所有行的第2列和第3列数据
arr2d[:,1:3]

结果:array([[ 2,  3],
             [ 6,  7],
             [10, 11]])

 

#沿着第0轴方向从脚标1开始取到最后,沿着第1轴从脚标1开始取到3的前一位
arr2d[1:,1:3]

结果:array([[ 6,  7],
             [10, 11]])

数组运算

1、转置

#reshape(shape)函数改变数组形状,shape是一个元组,表示数组的形状

创建一个包含15个元素的一维数组,通过reshape函数调整数组形状为3行5列的二维数组
arr = np.arange(15).reshape((3,5))
print(arr)

结果:[[ 0  1  2  3  4]
            [ 5  6  7  8  9]
            [10 11 12 13 14]]

#转置,数组转置可以使用transpose方法或者T属性,转置返回的是源数组的视图,不会进行任何复制操作

#将3行5列的二维数组arr转置为5行3列的二维数组
arr.transpose()

结果:array([[ 0,  5, 10],
                     [ 1,  6, 11],
                     [ 2,  7, 12],
                     [ 3,  8, 13],
                     [ 4,  9, 14]])

#使用T属性实现转置
arr.T

结果:array([[ 0,  5, 10],
                     [ 1,  6, 11],
                     [ 2,  7, 12],
                     [ 3,  8, 13],
                     [ 4,  9, 14]])

2、算数运算

#注意:两个数组做算数法要求两个数组的结构要相同

#数组加法,两个数组对应位置的元素相加

arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.ones((2,3)) #2行3列的全1数组
arr1 + arr2 #相当于给数组arr1中的每个元素加1

结果:array([[ 2.,  3.,  4.],
                     [ 5.,  6.,  7.]])

#数组减法,两个数组对应位置的元素相减
arr1 - arr2

结果:array([[ 0.,  1.,  2.],
                     [ 3.,  4.,  5.]])

#数组乘法,两个数组对应位置的元素相乘
arr3 = np.array([[2,2,2],[2,2,2]])
arr1 * arr3

结果:array([[ 2,  4,  6],
                     [ 8, 10, 12]])

#使用tile函数构造数组,上一个arr3构造具有相同元素的数组非常麻烦,使用tile函数非常简洁
#第一个参数表示需要复制的数组,第二个参数是对应的轴方向上复制的次数

#第2个参数(2,3)表示在第0轴方向复制2次,第1轴方向复制3次,这样就构成了一个2行3列的二维数组

arr4 = np.tile([2],(2,3))
print(arr4)

结果:[[2 2 2]
           [2 2 2]]

#数组除法,两个数组对应位置的元素相除

arr1 / arr4

结果:array([[ 0.5,  1. ,  1.5],
                     [ 2. ,  2.5,  3. ]])

3、数组与标量算术运算

#对数组中每个元素求平方

arr1 ** 2

结果:array([[ 1,  4,  9],
                     [16, 25, 36]], dtype=int32)

#数组arr1中的每个元素加10

arr1 + 10

结果:array([[11, 12, 13],
                     [14, 15, 16]])

常用的统计方法

#求和,使用sum函数对数组中全部或者某轴向的元素求和

#数组中全部元素求和

arr1 = np.array([[1,2,3],[4,5,6]]) # 2行3列二维数组

arr1.sum()

结果:21

# 沿着第0轴方向求和

【Python】NumPy基础——ndarry数组对象_第2张图片

arr1.sum(axis=0)#简写arr1.sum(0)

结果:array([5, 7, 9])

# 沿着第1轴方向求和

【Python】NumPy基础——ndarry数组对象_第3张图片

arr1.sum(1)

结果:array([ 6, 15])

# 算术平均数

#求数组中全部元素的算术平均数
arr1.mean()​

结果:3.5

#沿第0轴方向求算术平均数
arr1.mean(0)

结果:array([ 2.5,  3.5,  4.5])

#沿第1轴方向求算术平均数

arr1.mean(1)

结果:array([ 2.,  5.])​

#最大最小值

#全部元素最大值
arr1.max()​​

结果:6

#全部元素最小值
arr1.min()

结果:1

#沿第1轴方向最大值
arr1.max(1)

结果:array([3, 6])

#沿第1轴方向最小值
arr1.min(1)

结果:array([1, 4])

你可能感兴趣的:(数据挖掘与分析策略,学习历程记录)