数据分析-numpy入门笔记

Numpy简易入门

目录

Numpy简易入门

1 认识NumPy数组对象

2 创建NumPy数组

3 ndarry对象的数据类型转换

4 数组运算

4.1向量化运算

4.2 数组广播

4.3 数组与标量间的运算

5 ndarray的索引和切片

5.1 整数索引和切片的基本使用

6 数组的转置和轴对称

7 NumPy通用函数

8 利用NumPy数组进行数据处理(后序更新)

8.1 将条件逻辑转为数组运算

8.2 数组统计运算

8.3 数组排序

8.4 检索数组元素

8.5 唯一化及其他集合逻辑

9 线性代数模块


1 认识NumPy数组对象

Numpy是一个用python实现的科学计算的扩展程序库,包括:

  • 1、一个强大的N维数组对象Array;
  • 2、比较成熟的(广播)函数库;
  • 3、用于整合C/C++和Fortran代码的工具包;
  • 4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。

NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。

import numpy as np
data = np.arrange(16).reshape(4,4)
data
type(data) #数组类型
data.ndim #数组维度
data.shape
data.size
data.dtype

#输出如下:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
numpy.ndarray
2
(4, 4)
16
dtype('int32')

2 创建NumPy数组

创建基本数组代码如下:

import numpy as np
data1 = np.array([1,2,3])
data2 = np.array([[1, 2, 3], [4, 5, 6]])
np.zeros((3, 4))#创建一个全0数组
np.ones((3, 4))#创建全一数组
np.empty((5, 2))# 创建全空数组,其实每个值都是接近于零的数

动态创建数组,并对数组元素指定元素类型

np.arange(1,20,5)
np.array([1,2,3,4],float)
np.ones((2,3),dtype='float64')

#分别输出如下:
array([ 1,  6, 11, 16])
array([1., 2., 3., 4.])
array([[1., 1., 1.],
       [1., 1., 1.]])

上面是创建时指定类型,接下来转换类型

3 ndarry对象的数据类型转换

查看类型:

data_one = np.array([[1, 2, 3], [4, 5, 6]])
data_one.dtype.name  #'int32'
date_one.dtype   #dtype('int32')

类型转换:比如转换成float64。运用astype()方法进行转换,参数为np.数据类型

float1data = data_one.astype(np.float64)
float1data.dtype   #dtype('float64')

其他实例:

float_data = np.array([1.2, 2.3, 3.5])
nt_data = float_data.astype(np.int64)
int_data        #array([1, 2, 3], dtype=int64)

4 数组运算

4.1向量化运算

import numpy as np
data1 = np.array([[1, 2, 3], [4, 5, 6]])
data2 = np.array([[1, 2, 3], [4, 5, 6]])
data1 + data2        # 数组相加
'''
array([[ 2,  4,  6],
       [ 8, 10, 12]])
'''
data1 * data2  #对位相乘
'''
array([[ 1,  4,  9],
       [16, 25, 36]])
'''
data1 - data2        # 数组相减
'''
array([[0, 0, 0],
       [0, 0, 0]])
'''
data1 / data2       # 数组相除
'''
array([[1., 1., 1.],
       [1., 1., 1.]])
'''

4.2 数组广播

numpy数组间的基础运算是一对一,也就是a.shape==b.shape,但是当两者不一样的时候,就会自动触发广播机制,如下例子:

import numpy as np
arr1 = np.array([[0], [1], [2], [3]])
arr1.shape  #(4, 1)
arr2 = np.array([1, 2, 3])
arr2.shape #(3,)
arr1 + arr2
'''
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])

'''

原理如下图

4.3 数组与标量间的运算

import numpy as np
data1 = np.array([[1, 2, 3], [4, 5, 6]])
data2 = 10
data1 + data2      # 数组相加
'''
array([[11, 12, 13],
       [14, 15, 16]])
'''
data1 * data2       # 数组相乘
'''
array([[10, 20, 30],
       [40, 50, 60]])
'''
data1 - data2        # 数组相减
'''
array([[-9, -8, -7],
       [-6, -5, -4]])
'''
data1 / data2       # 数组相除
'''
array([[0.1, 0.2, 0.3],
       [0.4, 0.5, 0.6]])
'''

5 ndarray的索引和切片

5.1 整数索引和切片的基本使用

先说切片,切片类似python中切片。原理图

 

 发现规律如下:

  1. 切片中参数以逗号隔开,冒号:周围的2个参数表示范围(左闭右开区间)。
  2. numpy数组下标依旧是0开始的。
  3. 如果冒号:周围参数维度已经用完,新的冒号代表的是步伐大小(和python类似)
  4. 索引可以用整数和数组当索引(但要注意的是数组作为索引要清楚维度)
  5. 布尔型也可以作为索引,代码如下:
import numpy as np
# 存储学生姓名的数组
student_name = np.array(['Tom', 'Lily', 'Jack', 'Rose'])
# 存储学生成绩的数组
student_score = np.array([[79, 88, 80], [89, 90, 92], [83, 78, 85], [78, 76, 80]])
# 对student_name和字符串“Jack”通过运算符产生一个布尔型数组
student_name == 'Jack' #array([False, False,  True, False])

# 将布尔数组作为索引应用于存储成绩的数组student_score,
# 返回的数据是True值对应的行
student_score[student_name=='Jack']  #array([[83, 78, 85]])

student_score[student_name=='Jack', :1]  #array([[83]])

6 数组的转置和轴对称

import numpy as np

arr = np.arange(12).reshape(3, 4)
arr.T      # 使用T属性对数组进行转置
'''
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])
'''
arr = np.arange(16).reshape((2, 2, 4)) 
arr
'''
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

'''

arr.transpose(1, 2, 0)  
 # 使用transpose()方法对数组进行转置 注意参数是指定维度转换,对应维度数值为2 4 2
'''
array([[[ 0,  8],
        [ 1,  9],
        [ 2, 10],
        [ 3, 11]],

       [[ 4, 12],
        [ 5, 13],
        [ 6, 14],
        [ 7, 15]]])
'''
arr.swapaxes(1, 0)    # 使用swapaxes方法对数组进行转置

#轴对称,swapaxes接受一对轴编号,或者叫一对维度编号,里面只能是两个参数,且不分顺序。
'''
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])
'''

7 NumPy通用函数

arr = np.array([4, 9, 16])
np.sqrt(arr)#开方
np.abs(arr)#求绝对值
np.square(arr)#求平方

x = np.array([12, 9, 13, 15])
y = np.array([11, 10, 4, 8])

np.multiply(x, y) # 计算两个数组的乘积 array([132,  90,  52, 120])

np.maximum(x, y)  # 两个数组元素级最大值的比较
#array([12, 10, 13, 15])

np.greater(x, y)  # 执行元素级的比较操作 array([ True, False,  True,  True])

8 利用NumPy数组进行数据处理(后序更新)

8.1 将条件逻辑转为数组运算

即是把逻辑运算转换成数组运算

8.2 数组统计运算

8.3 数组排序

8.4 检索数组元素

8.5 唯一化及其他集合逻辑

9 线性代数模块

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值