python工具包--Numpy小练习

简介: python工具包--Numpy小练习
import numpy as np


1.打印当前Numpy版本


print(np.__version__)


1.18.1


2.构造一个全零的矩阵,并打印其占用的内存大小


Clichong = np.zeros((5,5))
Clichong


array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])


# 数组的数量
Clichong.size


25


# 数组每个元素的大小
Clichong.itemsize


8


# 数组的类型
Clichong.dtype


dtype('float64')


# 可以知道Clichong这个二维变量的大小
print("size:",Clichong.size*Clichong.itemsize)


size: 200


3.打印一个函数的帮助文档,比如numpy.add


print(help(np.add))


4.创建一个10-49的数组,并将其倒序排列


# arange(10,50,1)是numpy语句部分,后面的[::-1]是python语句部分,所以可以使用一句就可以实现倒序排序
Clichong = np.arange(10,50,1)[::-1]
Clichong


[49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26
 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10]
array([49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
       32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16,
       15, 14, 13, 12, 11, 10])


5.找到一个数组中不为0的索引


# 测试数组
test = np.array([2,3,5,7,0,2,0,4,2,6,0,5,26,7,0,6,0,0])
print("test.size:",test.size)


test.size: 18


# 方法1:利用where语句
a = np.where(test != 0)
print("position:",a)


position: (array([ 0,  1,  2,  3,  5,  7,  8,  9, 11, 12, 13, 15], dtype=int64),)


# 方法2:利用nonzero函数
a = np.nonzero(test)
print("position:",a)


position: (array([ 0,  1,  2,  3,  5,  7,  8,  9, 11, 12, 13, 15], dtype=int64),)


6.随机构造一个3*3矩阵,并打印其中最大与最小值


# randint创建一个取值为0-100,3x3的随机矩阵
Clichong = np.random.randint(100,size = (3,3))
print("Clichong:\n",Clichong)
# 全部元素进行对比
print("max:",Clichong.max())
print("min:",Clichong.min())
# 对列进行对比
print("max:",Clichong.max(axis = 0))
# 对行进行对比
print("min:",Clichong.min(axis = 1))


Clichong:
 [[95 15 84]
 [55 22 28]
 [ 2 29 91]]
max: 95
min: 2
max: [95 29 91]
min: [15 22  2]


7.构造一个5*5的矩阵,令其值都为1,并在最外层加上一圈0


#利用numpy的pad函数,其相关参数API文档如下,可以print(help(np.pad))来打印出来查看
Clichong = np.ones((5,5))
Clichong = np.pad(Clichong,1,mode='constant',constant_values = 0)
Clichong
#print(help(np.pad))


array([[0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0.]])


8.构建一个shape为(6,7,8)的矩阵,并找到第100个元素的索引值


# 使用unravel_index函数来找到索引值,print(help(np.unravel_index))
Clichong = np.random.randint(10,size = (6,7,8))
print(Clichong.shape)
# 100是索引值,(6,7,8)是矩阵的形状,只能写出来,不能用Clichong替代,具体参考文档
np.unravel_index(100,(6,7,8))
# print(help(np.unravel_index))


(6, 7, 8)
(1, 5, 4)


9.对一个5*5的矩阵做归一化操作


归一化的定义与功能:归一化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其


次是保证模型运行时收敛加快。


# Clichong = np.random.randint(10,size = (5,5))
Clichong = np.random.random((5,5))
print("before:\n",Clichong)
max = Clichong.max()
min = Clichong.min()
Clichong = (Clichong-min)/(max-min)
print("After:\n",Clichong)


before:
 [[0.42707272 0.81047186 0.91071421 0.23840794 0.3771108 ]
 [0.90182748 0.90802103 0.61158242 0.00489321 0.21548403]
 [0.64966355 0.65816033 0.04054501 0.00760435 0.44263836]
 [0.84498916 0.47003901 0.77073106 0.38147171 0.50009968]
 [0.65061004 0.79489827 0.84465063 0.94343758 0.4159035 ]]
After:
 [[0.4498237  0.85832772 0.96513392 0.24880521 0.3965903 ]
 [0.95566528 0.96226438 0.64641505 0.         0.22438025]
 [0.68698972 0.69604287 0.03798627 0.00288866 0.46640859]
 [0.89510521 0.49560342 0.81598471 0.40123676 0.52763245]
 [0.68799819 0.84173438 0.89474451 1.         0.43792313]]


10.找到两个数组中相同的值或者是相同值的位置


# 定义两个随机数组取值为0-10,数目为30个
a = np.random.randint(0,20,10)
b = np.random.randint(0,20,10)
print("a:",a)
print("b:",b)


a: [18  1 10 15  6  8 16 10 12 14]
b: [ 5 12  5  0 19  5 18 15  0  0]


# 找出两个数组相同值的位置
np.where(a == b)


(array([], dtype=int64),)


# 找出两个数组中共有的值,利用intersect1d函数
np.intersect1d(a,b)


array([12, 15, 18])


11.得到今天 明天 昨天的日期


# 利用datetime64函数 print(help(np.datetime64))
today = np.datetime64('today','D')
yesterday = np.datetime64('today','D') - np.timedelta64(1,'D')
tomorrow = np.datetime64('today','D') + np.timedelta64(1,'D')
print("today:",today)
print("yesterday:",yesterday)
print("tomorrow:",tomorrow)


today: 2021-01-20
yesterday: 2021-01-19
tomorrow: 2021-01-21


12.得到一个数的整数部分


# 定义一个小数数组,范围是0-10,个数为10个
z = np.random.uniform(0,10,10)
print(z)
# 去除小数部分的函数floor
np.floor(z)


[9.78465077 2.07504483 8.34613494 2.81205194 2.97713123 0.26551266
 6.33476669 6.13764817 5.38474901 0.57251498]
array([9., 2., 8., 2., 2., 0., 6., 6., 5., 0.])


13.构造一个数组,让它不能被改变


Clichong = np.array([1,2,3,4,5,6,7,8,9,0])
# 关闭可改标志
Clichong.flags.writeable = False
Clichong[1] = 0


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-59-7fa6a686b7d3> in <module>
      2 # 关闭可改标志
      3 Clichong.flags.writeable = False
----> 4 Clichong[1] = 0
ValueError: assignment destination is read-only


14.打印大数据的部分值,全部值(无需全部打印出来)


# 通过set_printoptions函数来设置,都只是显示6行6列
# np.set_printoptions(threshold=10000) # 这个参数填的是你想要多少行显示
# np.set_printoptions(linewidth=100) # 这个参数填的是横向多宽
np.set_printoptions(threshold=20)
z = np.zeros((15,15))
z


array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]])


15.找到在一个数组中,最接近一个数的索引


# 函数argmin返回沿轴的最小值的索引。如果多次出现最小值,则索引对应于第一次出现的返回。
a = np.random.uniform(0,10)
b = np.arange(10)
print("a:",a)
print("b:",b)
# abs()的操作的去绝对值的操作,所以一个很小的负数取绝对值会变成一个很大的数
print((np.abs(b-a)))
print("最接近的索引是:",(np.abs(b-a)).argmin())
#(np.abs(b-a)).argmin()
#print(help(np.argmin))


a: 6.430836025704295
b: [0 1 2 3 4 5 6 7 8 9]
[6.43083603 5.43083603 4.43083603 3.43083603 2.43083603 1.43083603
 0.43083603 0.56916397 1.56916397 2.56916397]
最接近的索引是: 6


16.32位float类型和32位int类型转换


Clichong = np.array([1,2,3,4,5,6,7,8,9],dtype = np.float32)
print("before_type",Clichong.dtype)
Clichong = Clichong.astype(np.int32)
print("After_type",Clichong.dtype)


before_type float32
After_type int32


17.打印数组元素位置坐标与数值


# ndenumerate函数与python中的enumerate类似,reshape可以重新改变数组的结构
Clichong = np.arange(9).reshape(3,3)
for index,value in np.ndenumerate(Clichong):
    print (index,value)
print(np.ndenumerate(Clichong)


(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 3
(1, 1) 4
(1, 2) 5
(2, 0) 6
(2, 1) 7
(2, 2) 8
<numpy.ndenumerate object at 0x00000270CE55DA88>


18.按照数组的某一列进行排序(比较抽象,需要多看几遍)


# 按照第二列升序
Clichong = np.array([[1,2,4],[3,5,2],[4,3,1],[2,4,0]])
print(Clichong)


[[1 2 4]
 [3 5 2]
 [4 3 1]
 [2 4 0]]


# 方法:lexsort函数
# 其中的 1 表示升序; 若是是 -1 则表示降序
index = np.lexsort([1*Clichong[:,1]])
print("index:",index)
Clichong[index]


index: [0 2 3 1]
array([[1, 2, 4],
       [4, 3, 1],
       [2, 4, 0],
       [3, 5, 2]])


# 方法2:argsort函数
# z[z[:,1].argsort()]
print("index:",Clichong[:,1].argsort())
Clichong[Clichong[:,1].argsort()]


index: [0 2 3 1]
array([[1, 2, 4],
       [4, 3, 1],
       [2, 4, 0],
       [3, 5, 2]])


19.统计数组中每个数值出现的次数


在python中,统计数值出现的次数有直接的函数来完成,不需要再自己写一个复杂的函数


Clichong = np.array([1,0,1,0,1,2,0,2,3,3,4,5,8])
print(np.bincount(Clichong))


[3 3 2 2 1 1 0 0 1]


20.找到一个数组中最常出现的数字


Clichong = np.array([1,0,6,6,1,0,1,6,2,6,0,2,3,0,6,3,4,6,0,5,8])
# 统计数组中每个数值出现的次数
Clichong = np.bincount(Clichong)
print(Clichong)
# 返回最多出现数字的下标,也就打印出最常出现的数字
np.argmax(Clichong)


[5 3 2 2 1 1 6 0 1]
6


21.交换矩阵中的两行


Clichong = np.random.randint(10,size = (5,5))
print("Clichong_before:\n",Clichong)
Clichong[[0,1]] = Clichong[[1,0]]
print("Clichong_after:\n",Clichong)


Clichong_before:
 [[1 9 5 5 5]
 [0 5 8 2 9]
 [7 0 3 8 0]
 [3 5 0 7 3]
 [1 5 3 4 3]]
Clichong_after:
 [[0 5 8 2 9]
 [1 9 5 5 5]
 [7 0 3 8 0]
 [3 5 0 7 3]
 [1 5 3 4 3]]




目录
相关文章
|
2天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
9 2
|
8天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
18 3
|
10天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
29 5
|
8天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
28 2
|
14天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
20 2
|
14天前
|
C语言 开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第21天】在Python的世界里,代码的优雅与效率同样重要。列表推导式(List Comprehensions)作为一种强大而简洁的工具,允许开发者通过一行代码完成对列表的复杂操作。本文将深入探讨列表推导式的使用方法、性能考量以及它如何提升代码的可读性和效率。
|
24天前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
42 2
|
30天前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
44 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
11天前
|
C语言 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第24天】在Python编程的世界中,追求代码的简洁性和可读性是永恒的主题。列表推导式(List Comprehensions)作为Python语言的一个特色功能,提供了一种优雅且高效的方法来创建和处理列表。本文将深入探讨列表推导式的使用场景、语法结构以及如何通过它简化日常编程任务。
|
23天前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
15 0

热门文章

最新文章