Python基础之八-Numpy介绍

Python基础之八-Numpy介绍

一、Numpy简介
Numpy是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。对于同样的数组计算任务,使用Numpy比直接使用Python要简洁的多 。
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

二、Numpy优势
对于同样的数值计算任务,使用Numpy要 比直接编写Python代码便捷得多
Numpy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的
Numpy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得Numpy比纯Python代码高效得多

三、ndarray与Python原生list运算效率对比
import random
import time
import numpy as np

a = []
for i in range(10000000):
a.append(random.random())
t1 = time.time()
sum1 = sum(a)
t2 = time.time()

b = np.array(a)
t4 = time.time()
sum2 = np.sum(b)
t5 = time.time()
print(t2-t1, t5-t4)
在这里插入图片描述

求和个数越多越能体现ndarray计算的速度之快

四、Numpy的Ndarray对象
Numpy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。ndarray对象是用于存放同类型元素的多维数组
1、创建一维数组
import numpy as np
list1 = [1, 2, 3, 4]
oneArray = np.array(list1)
print(type(oneArray))
print(oneArray)
print(“\n”)
#创建数组的多种形式
#1、直接传入列表的方式
t1 = np.array([1, 2, 3])
print(t1)
print(type(t1))
print(“\n”)
#2、传入range生成的序列
t2 = np.array(range(10))
print(t2)
print(type(t2))
print(“\n”)
#3、使用numpy自带的np.arange()生成数组
t3 = np.arange(0, 10, 2)
print(t3)
print(type(t3))
在这里插入图片描述

2、创建二维数组
在这里插入图片描述

3、常用属性
数组的维度,形状,元素个数
在这里插入图片描述

4、调整数组的形状
#调整数组的形状
tempArray = np.array([[1, 2, 3], [4, 5, 6]])

#修改的是原数组
print(tempArray.shape)
tempArray.shape = (3, 2)
print(tempArray)

#返回新数组
tempArray1 = tempArray.reshape(2, 3)
print(tempArray)
print(tempArray1)

#将多维变成一维数组
oneArray1 = tempArray1.reshape((6,), order=‘F’)
#默认情况下’C’以行为主的顺序展开,‘F’意味着以列的 顺序展开
oneArray2 = tempArray1.flatten(order=‘F’)
print(oneArray1)
print(oneArray2)

#拓展:数组的形状
t = np.arange(24)
print(t)
print(t.shape)
#转换成二维
t1 = t.reshape((4, 6))
print(t1)
print(t1.shape)
#转换为三维
t2 = t.reshape((2, 3, 4))
print(t2)
print(t2.shape)
在这里插入图片描述

5、将数组转换为List
#将数组转换为List
a = np.array([9, 12, 88, 14, 25])
list_a = a.tolist()
list_b = list(a)
print(list_a)
print(list_b)
print(type(list_a))
print(type(list_b))
在这里插入图片描述

五、Numpy的数据类型
在这里插入图片描述

f = np.array([1, 2, 3, 4, 5], dtype=np.int16)
#返回数组中每个元素的字节单位长度
print(f.itemsize)
#获取数据类型
print(f.dtype)
print(f)

#调整数据类型
f1 = f.astype(np.int64)
print(f1.dtype)
print(f1)

#拓展随机生成小数
#使用python语法,保留两位
print(round(random.random(), 2))

arr = np.array([random.random() for i in range(10)])
#取小数点后两位
print(np.round(arr,2))

在这里插入图片描述

六、数组的计算
1、数组和数的计算
在这里插入图片描述

2、数组和数组之间的操作
同形状的数组可以对应位置进行计算
在这里插入图片描述
不同形状的多维数组不能计算
在这里插入图片描述

行数或者列数相同的一维数组 和多维数组可以进行计算
行形状相同时,会对每一行数组的对应位相操作
在这里插入图片描述

列形状相同时,会对每一列相同维度的数组对应位相操作
在这里插入图片描述

七、数组中的轴
1、轴:在numpy中可以理解为方向,使用0,1,2数字表示,对于 一个一维数组,只有一个0轴,
对于2维数组(shape(2,2))有0轴和1轴
对于3维数组(shape(2,2,3))有0,1,2轴
2、有了轴的概念后,我们计算会更加便捷,比如计算一个2维数组的平均值,必须指定是计算哪个方向上的数的平均值

import numpy as np

a = np.array([1, 2, 3], [4, 5, 6])
print(np.sum(a, axis=0))

print(np.sum(a, axis=1))

print(np.sum(a))

a = np.arange(27).reshape((3, 3, 3))
print(a)

运行结果
[5 7 9]
[ 6 15]
21
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]

[[ 9 10 11]
[12 13 14]
[15 16 17]]

[[18 19 20]
[21 22 23]
[24 25 26]]]

在计算时可以想象成是每一个坐标轴, 分别计算这个轴上面的每个刻度上的值, 或中二维数组中记住0表示列,1表示行

八、数组的索引和切片
1、一维数组的操作方法

import numpy as np
a = np.arange(10)
#冒号分隔切片参数start:stop:step来进行切片操作
print(a[2:7:2])  #从索引2开始到索引7停止, 间隔为2

#如果只放置一个参数, 如【2】, 将返回与该索引相对应的
print(a[2], a)

#如果为[2:], 表示从该索引开始以后的所有项都将被提取
print(a[2:])

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

2、多维数组的操作方法

import numpy as np

t1 = np.arange(24).reshape(4, 6)
print(t1)
print('*'*20)
print(t1[1]) #取一行(一行代表一条数据, 索引从0开始)
print(t1[1, :]) #取已一行
#取连续的多行
print(t1[1:])
print(t1[1:3, :])
#取不连续的多行
print(t1[[0, 2, 3]])
print(t1[[0, 2, 3], :])
#取一列
print(t1[:, 1])
#取连续的多列
print(t1[:, 1:])
#取不连续的多列
print(t1[:, [0, 2, 3]])
#取某一个值, 三行四列
print(t1[2, 3])
#取多个不连续的值, [[行, 行...], [列, 列...]]
print(t1[[0, 1, 1], [0, 1, 3]])

运行结果:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]


[ 6 7 8 9 10 11]
[ 6 7 8 9 10 11]
[[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[ 6 7 8 9 10 11]
[12 13 14 15 16 17]]
[[ 0 1 2 3 4 5]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[ 0 1 2 3 4 5]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[ 1 7 13 19]
[[ 1 2 3 4 5]
[ 7 8 9 10 11]
[13 14 15 16 17]
[19 20 21 22 23]]
[[ 0 2 3]
[ 6 8 9]
[12 14 15]
[18 20 21]]
15
[0 7 9]

九、数组中修改数值修改

t = np.arange(24).reshape(4, 6)

#修改某一行的值
t[1, :] = 0
print(t)

运行结果:
[[ 0 1 2 3 4 5]
[ 0 0 0 0 0 0]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值