Python数据分析简单练习

Python数据分析与应用


第2章 NumPy数值计算基础


任务2.1 掌握NumPy数组对象ndarray

2.1.1 创建数组对象

1.数组属性

下面用arr表示数组的意思

  • 数组的维数:arr.ndim
  • 数组的形状(尺寸):arr.shape
  • 数组的元素总数:arr.size
  • 数组中元素的类型:arr.dtype
2.数组创建

1.numpy.array()函数创建一维或多维数组:

numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin = 0)

import numpy as np
arr1=np.array([1,2,3,4])
print("创建的数组为:",arr1)

# 创建二维数组
arr2 = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
print("创建的数组为:\n", arr2)

print("数组维度为:", arr2.ndim)  # 查看数组维度

print("数组的形状shape为:\n", arr2.shape)  # 查看数组结构

print("数组类型dtype为:", arr2.dtype)  # 查看数组类型

print("数组元素个数size为:", arr2.size)  # 查看数组元素个数

print("数组每个元素大小itemsize为:", arr2.itemsize)  # 查看数组每个元素大小

输出结果如下:

 创建的数组为:
 [1 2 3 4]
 创建的数组为:
 [[ 1  2  3  4]
 [ 4  5  6  7]
 [ 7  8  9 10]]
 数组维度为: 2
 数组的形状shape为:
 (3, 4)
 数组类型dtype为: int32
 数组元素个数size为: 12
 数组每个元素大小itemsize为: 4

重新设置数组的shape属性:


import numpy as np

arr1 = np.array([1, 2, 3, 4])
print("创建的数组为:", arr1)

# 创建二维数组
arr2 = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
arr2.shape = 4, 3
print("创建的数组为:\n", arr2)

print("数组形状为:", arr2.shape)  # 查看数组结构
print("数组类型为:", arr2.dtype)  # 查看数组类型
print("数组元素个数为:", arr2.size)  # 查看数组元素个数

print("数组每个元素大小为:", arr2.itemsize)  # 查看数组每个元素大小
# 运行结果如下:
创建的数组为: [1 2 3 4]
创建的数组为:
 [[ 1  2  3]
 [ 4  4  5]
 [ 6  7  7]
 [ 8  9 10]]
数组形状为: (4, 3)
数组类型为: int32
数组元素个数为: 12
数组每个元素大小为: 4

2.numpy.arange()创建一维数组:

arrange() 函数类似于 Python 自带的函数 range(),通过指定起始值、终止值和步长来创建一维数组,但是该函数所创建的数组中不包含终止值。

示例:

print("使用arange函数创建的数组:\n", np.arange(0, 1, 0.1))

print(np.arange(7))  # 输出0到6的一维数组,等价于print(np.arange(0,7,1))
# 运行结果如下:
使用arange函数创建的数组:
 [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
[0 1 2 3 4 5 6]

3.linspace() 函数创建等差数列的一维数组

linspace() 函数是通过指定起始值、终止值和元素个数来创建一个等差数列的一维数组,默认设置包括终止值。如果在该函数中设置参数 endpoint=0,则创建的一维数组不包含终止值。该函数创建的数组元素的数据格式是浮点型。
注意:该函数指定了范围之间的均匀间隔数量,而不是步长。

示例:

print("使用linspace函数创建的数组:\n", np.linspace(0, 1, 12))
#运行结果如下:
使用linspace函数创建的数组:
 [0.         0.09090909 0.18181818 0.27272727 0.36363636 0.45454545
 0.54545455 0.63636364 0.72727273 0.81818182 0.90909091 1. 

4.logspace() 函数创建数组

logspace() 函数和 linspace() 函数类似,但 logspace() 函数的起始值和终止值代表的是 10 的幂(默认基数为 10),如果要修改基数,可设置参数 base。

例如,numpy.logspace(0,20,20) 的第 1 个起始值参数 0 代表 10 的 0 次方,第 2 个终止值参数 20 代表 10 的 20 次方,第 3 个表示元素个数参数为 20。创建等比数列的一维数组为 [1.000000000e+001.12883789e+01 1.27427499e+02 1.43844989e+03 … 1.00000000e+ 20],其中…表示中间省略一些数据。

print("使用logspace函数创建的等比数列:\n", np.logspace(0, 2, 20)) 
# 生成1到100的等比数列,分成20份。0和2是次方,分别表示10的0次方和10的2次方

#以下是运行结果:
使用logspace函数创建的等比数列:
 [  1.           1.27427499   1.62377674   2.06913808   2.6366509
   3.35981829   4.2813324    5.45559478   6.95192796   8.8586679
  11.28837892  14.38449888  18.32980711  23.35721469  29.76351442
  37.92690191  48.32930239  61.58482111  78.47599704 100.
  1. 特殊数组
    ①zeros()

使用 zeros() 函数创建值全部为 0 的数组,即创建的数组值全部填充为 0。例如 numpy.zeros((1,3)),创建数组 [[0. 0. 0.]],数组值全部为 0。

示例:

print("使用zeros函数创建的数组为:\n", np.zeros((2, 3)))

# 以下是运行结果:
使用zeros函数创建的数组为:
 [[0. 0. 0.]
 [0. 0. 0.]]

②eye()、identity()

eye() 函数和 identity() 函数用来生成主对角线上的元素为 1,其他元素为 0 的数组,类似于单位矩阵。

print("使用eye函数创建的数组为:\n", np.eye((3)))
print("\n")
print("使用identity函数创建的数组为:\n", np.identity(3))

# 以下是运行结果:
使用eye函数创建的数组为:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]


使用identity函数创建的数组为:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

③diag()

diag() 函数创建类似对角的数组,即除对角线以外的其他元素都为 0,对角线上的元素可以是 0 或其他值。

print("使用diag函数创建的数组为:\n", np.diag([1, 2, 3, 4]))

# 以下是运行结果:
使用diag函数创建的数组为:
 [[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]

④ones()

ones() 函数用来创建元素全部为1的数组,即创建的数组元素全部填充为 1。

print("使用ones函数创建的数组为:\n", np.ones((5, 3)))

# 以下是运行结果:
使用ones函数创建的数组为:
 [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

6.asarray() 函数创建数组

asarray() 函数类似于 numpy.array,该函数可用于将 Python 序列转换为 ndarray。

示例:

>>>import numpy as np
>>>print(np.asarray([(1,2,3),(4,5,6)]))
[[1 2 3]
 [4 5 6]]
>>>print(np.asarray([1,2,3,4,5,6]))
[1 2 3 4 5 6]

7.empty() 函数创建数组

empty() 函数创建指定形状和只分配内存空间的数组,而数组中的所有元素都未初始化。

示例:

>>>import numpy as np
>>>empty_arr=np.empty((2,3))
>>>print("我创建了一个2行3列的空数组:\n",empty_arr)
我创建了一个23列的空数组:
 [[6.23042070e-307 1.33512376e-306 1.11261230e-306]
 [7.56577399e-307 9.34600963e-307 5.63234836e-322]]

3.数组数据类型

见表1:
在这里插入图片描述
练习,数组数据类型转换:

>>>import numpy as np
# 整型转浮点
>>>print(np.float64(33))
33.0
# 浮点转整数
>>>print(np.int8(52.0))
52
# 整型转布尔
>>>print(np.bool_(33))
True
>>>print(np.bool_(0))
False
# 布尔转浮点
>>>print(np.float(True))
1.0
>>>print(np.float_(True))
1.0
>>>print(np.float_(False))
0.0

练习:创建数据类型并自定义数组数据然后进行查看:

>>>import numpy as np
>>>data_type=np.dtype([("name",np.str_,40),("stu_number",np.int64),("Python_Score",np.float_)])
>>>print("创建的数据类型为:\n",data_type)
创建的数据类型为:
 [('name', '<U40'), ('stu_number', '<i8'), ('Python_Score', '<f8')]
 
# 查看某一项
>>>print("'name'的数据类型为:",data_type["name"])
'name'的数据类型为: <U40

# 等价于
>>>print("'name'的数据类型为:",np.dtype(data_type["name"]))
'name'的数据类型为: <U40

>>>myscore=np.array([("henry",33,100),("Leonardo",50,99.5),("Tony",20,95.5)],dtype=data_type)
>>>print("有三个人的成绩,分别为:\n",myscore)
有三个人的成绩,分别为:
 [('henry', 33, 100. ) ('Leonardo', 50,  99.5) ('Tony', 20,  95.5)]

2.1.2 生成随机数

在数据分析中,随机数不仅有利于数据分析,而且在机器学习方面随机数的使用也是机器学习算法配置和评估的重要部分。例如,神经网络中的权重的随机初始化和将数据分成随机的训练和测试集等。因此,生成随机数是数据分析中一项很重要的技术。

在 Python 中,可以通过 Python 中的 random 模块生成随机数,但是,其效率要远低于利用 NumPy 中的 random 模块生成随机数。numpy.random 模块提供了非常全的自动产生数据的 API,通过该模块中的函数可以很方便地生成随机数。下面介绍使用 numpy.random 模块中的函数生成随机数的常用方法。

1.random()函数

numpy.random.random(size=None)
该函数的作用是产生 [0.0, 1.0) 之间的浮点数,但数组的元素不包括 1。size 表示生成元素个数。若没有参数输入,则生成一个数。

2.rand()函数

numpy.random.rand(d0,d1, …,dn)
该函数的作用是生成一个 (d0,d1, …,dn) 维的数组,数组的元素取自 [0, 1) 内均匀分布(uniform distribution)的随机数,但数组的元素不包括 1。若没有参数输入,则生成一个数。括号里面的参数是指定产生数组的形状

3.randn()函数

numpy.random.randn(d0,d1, …,dn)
该函数的作用是生成一个 (d0,d1, …,dn) 维的数组,数组的元素是标准正态分布(standard normal distribution )随机数。若没有参数输入,则生成一个数。括号里面的参数是指定产生数组的形状。

4.randint()函数

numpy.random.randint(low, high, size, dtype)
该函数的作用是生成指定范围的随机数,随机数取值区间为 [low, high)若没有输入参数 high 则取值区间为 [0, low)。size 参数是元组,用于确定数组的形状,dtype 用于指定数组中的数据类型。

>>>import numpy as np
# 下面进行随机数组练习
>>>random_arr1=np.random.random(100)
>>>print("这个随机数组是:\n",random_arr1)
这个随机数组是:
 [0.21680637 0.29738359 0.22487339 0.99141352 0.81880868 0.10312278
 0.67144097 0.91740689 0.57489136 0.51397618 0.11142218 0.59086352
 0.52242695 0.62498617 0.0638537  0.20217999 0.77577775 0.03113751
 0.7952096  0.32221275 0.65482632 0.2812103  0.34421817 0.87220556
 0.43433508 0.25805087 0.8287889  0.04669848 0.56584176 0.44552472
 0.98638703 0.75658692 0.9255556  0.09215122 0.00105781 0.71685962
 0.9486347  0.98464119 0.59151549 0.28145002 0.62689622 0.60206256
 0.01346433 0.63715557 0.80616895 0.00631733 0.50394126 0.3791287
 0.51777702 0.01959127 0.36921442 0.07205915 0.78380294 0.70543638
 0.84432659 0.80895138 0.24837526 0.63699697 0.78185358 0.42005152
 0.79957068 0.52472026 0.41861564 0.27333491 0.07773659 0.00134764
 0.96198358 0.13988701 0.05941118 0.59622445 0.34976551 0.63608648
 0.28696116 0.51768187 0.67785968 0.81292812 0.04187511 0.54323726
 0.84869567 0.51446357 0.76797933 0.20501991 0.20825898 0.65385723
 0.61713629 0.49554963 0.02810133 0.21055467 0.2633886  0.10553809
 0.36658315 0.59595684 0.85953948 0.81433552 0.64328289 0.69343391
 0.87065002 0.39563704 0.74943466 0.17858116]
 
>>>random_arr2=np.random.rand(10,5)
>>>print("这个服从均匀分布的随机数组是:\n",random_arr2)
这个服从均匀分布的随机数组是:
 [[0.4903026  0.2863109  0.63583446 0.89155601 0.30934052]
 [0.76473027 0.64829495 0.69632623 0.55077825 0.06954565]
 [0.64819611 0.30287847 0.86696245 0.69517105 0.88836638]
 [0.58445374 0.93220169 0.4419734  0.93095897 0.18095675]
 [0.62767183 0.53023035 0.43852963 0.30247712 0.68666728]
 [0.52830421 0.27441127 0.9744326  0.5525306  0.84133361]
 [0.35939719 0.01731233 0.29615996 0.33212475 0.17460576]
 [0.84189312 0.42736061 0.25893203 0.66748438 0.06079212]
 [0.6816783  0.84738841 0.97830796 0.87811138 0.52156361]
 [0.72207341 0.90842907 0.65890732 0.39491993 0.79636842]]
 
>>>random_arr3=np.random.randn(10,5)
>>>print("这个服从正态分布的随机数组是:\n",random_arr3)
这个服从正态分布的随机数组是:
 [[-2.09217681 -0.61300082 -0.3965641   0.2126686   1.17872859]
 [ 0.59206238  0.26324882  1.64175434 -0.68412385 -0.79578326]
 [ 0.65307721 -1.03424077  0.55426341  0.69360312  0.27818792]
 [-1.06894464 -0.47144897 -0.04041236 -1.10290399 -1.89437255]
 [ 0.29400613 -0.31038195  0.66309983  0.55654334  0.45922177]
 [ 0.51715582  0.62508288 -1.04908934  0.53881849 -0.87217223]
 [ 0.70456969  0.05599425 -1.08270059  0.33877443  0.83173423]
 [ 1.58525097  0.19668579 -0.50902494  0.66382809  0.00917319]
 [ 1.21094813 -0.23779939 -2.3240235  -0.65391578 -0.50208804]
 [-0.94627295  0.84351104  1.70062603 -2.02604729 -1.2596101 ]]
 
>>>random_arr4=np.random.randint(2,10,size=[2,5])
>>>print("这是一个给定上下限范围的随机数组:\n",random_arr4)
这是一个给定上下限范围的随机数组:
 [[7 9 7 7 5]
 [6 8 3 2 6]]

``



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值