Python可视化:数据可视化之NumPy——ndarray(详细集全)(1)Numpy基础
1.1 NumPy数组对象ndarray
NumPy:Numerical Python,是⼀个开源的Python科学计算库,它是⼀个由多维数组对象和⽤于处理数组的例程集合组成的库。NumPy的基本功能如下:
提供了⼀个具有⽮量算术运算和复杂⼴播功能的快速且节省空间的多维数组对象ndarray。
⽤于对数组执⾏元素级计算以及直接对数组执⾏数学运算的函数。
⽤于读写硬盘上基于数组的数据集的⼯具,以及⽤于操作内存映射⽂件的⼯具。
提供了线性代数、随机数⽣成以及傅⽴叶变换功能。
NumPy提供了两种基本对象: ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。
ndarray: 多维数组对象。ndarray⼀般是同质的(但特殊的数组类型可以是异质的),即数组中所有元素的数据类型必须⼀致;ufunc: 对数组进⾏处理的函数。
.
1.1.1 创建NumPy 数组、查看数组的属性
1.1.1.1 np.array()函数
最简单的创建ndarray对象的⽅式是使⽤array()函数,在调⽤该函数时传⼊⼀个列表或者元组。numpy.array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)
object:表⽰想要创建的数组。⽆默认
dtype:数组所需的数据类型。如果未给定,则选择保存对象所需的最⼩类型。默认为None
ndim:指定⽣成数组的最⼩维度,默认为None
# 导⼊NumPy⼯具包
import numpy as np
#从列表或元组创建⼀维数组
arr1 = np.array([1,2,3,4])
arr2 = np.array((5,6,7,8,))
print(arr1)
print(arr2)
#从列表或元组创建⼆维数组
arr3 = np.array([[1,2,3],[4,5,6],[7,8,9]])# 嵌套列表
print(arr3)
# 查看数组的形状
print(arr1.shape)
print(arr3.shape)
# 查看数组的维度
print(arr3.ndim)
# 查看数组的数据类型
print(arr1.dtype)
# 查看数组的数据元素总数
print(arr3.size)
# 查看数组每个元素的⼤⼩
print(arr3.itemsize)
1.1.1.2 其它内置函数创建数组
np.diag()函数: 创建以指定的值作为对⾓线元素值的数组
<() 函数: 创建对⾓线元素值为 1 的数组(单位矩阵)
zero = np.zeros((4,5), dtype =int)
ones =np.ones((5,4))
print(zero,"\n")
print(ones)
empty = np.empty((4,5))
print(empty)
diag = np.diag([1,2,3,4])
print("\n",diag,"\n")
eye = np.eye(5)
print(eye)
np.arange()函数:类似 python 的 range() ,创建⼀个⼀维数组。
reshape()函数:重新调整数组的维数
# arange()创建⼀维数组
z1 = np.arange(15)# z注意从0开始
# arange()创建指定范围的⼀维数组
z2 = np.arange(4,15)
# arange()创建[1,15)内等差值为2的数组
z3 = np.arange(1,15,2)
# arange()与reshape()联⽤调整数组的维数
z4 = np.arange(15).reshape(3,5)
print(z1)
print(z2)
print(z3)
print("\n",z4)
np.linspace()函数:创建指定区间内均匀分布的数组,等差数列
np.logspace()函数:创建等⽐序列
# 创建⼀个5个元素的数组,这5个数均匀的分布到 0~1
L1 = np.linspace(0,1,5)
# 创建⼀个5个元素的数组,这5个数均匀的分布到 2~10
L2 = np.linspace(2,10,5)
# 创建⼀个3个元素的数组,这3个数在1~100之间,呈等⽐关系
L3 = np.logspace(0,2,3)# log10的对数的值==0,1,2 ==> 1,10,100
print(L1)
print(L2)
print(L3)
1.1.
2.3 numpy.random模块:创建随机数数组
与Python的random模块相⽐,NumPy的random模块功能更多,它增加了⼀些可以⾼效⽣成多种概率分布的样本值的函数。
random()函数:numpy.random.random(size=None)
该函数作⽤产⽣[0.0, 1.0)之间的浮点数。size表⽰⽣成元素个数。若没有参数输⼊,则⽣成⼀个数。
rand()函数:numpy.random.rand(d0, d1, …, dn)
linspace numpy
该函数作⽤⽣成⼀个(d0, d1, …, dn)维的数组,数组的元素取⾃[0, 1)内均匀分布的随机数。若没有参数输⼊,则⽣成⼀个数。括号⾥⾯的参数是指定产⽣数组的形状。
randn()函数:numpy.random.randn(d0, d1, …, dn)
该函数作⽤⽣成⼀个(d0, d1, …, dn)维的数组,数组的元素是标准正太分布随机数。若没有参数输⼊,则⽣成⼀个数。括号⾥⾯的参数是指定产⽣数组的形状。
randint()函数:numpy.random.randint(low [low, high, size, dtype])
该函数作⽤⽣成指定范围的随机数,随机数取值区间为[low, high),若没有输⼊参数high则取值区间为[0, low)。size参数是元组,⽤于确定数组的形状。
# 创建16个[0.0, 1.0)之间的随机数⼀维数组,⽤reshape(4,4)成4*4⼆维数组。
np.random.random(16).reshape(4,4)
# 创建⼀个[0, 1)之间的⼆维随机数数组,数组形状为2⾏3列
n2 = np.random.rand(2,3)
# 创建⼀个[0, 1)之间的三维随机数数组,数组形状为(2,3,4)
n3 = np.random.rand(2,3,4)
print(n2,"\n")
print(n3)
rn = np.random.randn(2,3)
print("\n",rn)
# 创建⼀个 3⾏4列的随机整数数组,元素在[2,10)之间
ni = np.random.randint(2,10,size=(3,4))
print(ni)
random模块常⽤随机数⽣成函数:
.
1.1.2 ndarry对象的数据类型
ndarry对象的数据类型:NumPy的数据类型是由⼀个类型名和元素位长的数字组成。
NumPy中常⽤的数据类型:每⼀个NumPy内置的数据类型都有⼀个特征码,它能唯⼀标识⼀种数据类型。
# 查看数据类型
data_one = np.array([[1,2,3],[4,5,6]])
print(data_one.dtype)
1.1.
2.1 创建数据类型:
⾃定义数据类型是⼀种异构数据类型。
例如,创建⼀个存储书店库存信息的数据类型。其中,书名是⽤字符串表⽰的长度为30个字符,商品的库存数量⽤64位的整数来记录,书的价格⽤64位的单精度浮点数来记录。那么,使⽤⾃定义数据类型来创建数组的⽅法如下。
(1)使⽤dtype创建⾃定义数据类型;
(2)查看数据类型,可直接查看或使⽤numpy.dtype()函数查看;
(3)使⽤array()函数创建数组时,使⽤dtype指定数组的数据类型为⾃定义数据类型。
df = np.dtype([("name", np.str_,30),("number", np.int64),("price",np.float64)])
# 2)查看数据类型,可直接查看或使⽤ numpy.dtype() 函数查看
print(df["name"])
print(np.dtype(df["name"]))
# 3)使⽤⾃定义的数据类型 df 创建⼀个书籍item 数组
item = np.array([("⽃罗⼤陆",42,26.14),("⽃破苍穹",13,25.72)], dtype=df)
print(item)
item
.
1.1.
2.2 转换数据类型
转换数据类型
① 类似Python中的强制类型转换
② astype() 函数
data = np.array([[1,2,3],[4,5,6]])
print(data.dtype)
# astype()函数将数据类型转换为 float64
float_data = data.astype(np.float64)
print(float_data.dtype)
# 创建⼀个浮点数⼆维数组
float_data = np.array([1.2,2.3,3.5])
print("\n",float_data)
# astype()函数将数据类型转换为 int64
int_data = float_data.astype(np.int64)
print(int_data)
# 创建⼀个字符⼆维数组
str_data = np.array(['1','2','3'])
print("\n",str_data)
# astype()函数将数据类型转换为 int64
int_data = str_data.astype(np.int64)
print(int_data)
1.1.3 数组的切⽚与索引
# 创建⼀个⼀维数组
arr = np.arange(10)
# 获取索引为1~6的元素,步长为2
print(arr[1:6:2])
# 下标还可以⽤来修改元素的值
arr[2:4]=100,101
print(arr)
# 创建⼆维数组
arr2d = np.arange(1,10).reshape(3,3)
print(arr2d)
# 获取索引为1的元素
print(arr2d[1])
# 获取位于第1⾏第2列的元素
print(arr2d[1,2])
多维数组的切⽚是沿着⾏或列的⽅向选取元素的,我们可以传⼊⼀个切⽚,也可以传⼊多个切⽚,还可以将切⽚与整数索引混合使⽤。
# 在⼀个中括号[ ] ⾥以逗号,分⾏与列
print("传⼊⼀个切⽚:取连续多⾏:\n",arr2d[0:2])# 操作⾏
print("取不连续的多⾏:\n",arr2d[[0,2]])# 把[0,2]看成⼀个整体X,操作⾏# 取第2列,索引为1
s = arr2d[:,1]
print("第2列:\n",s)
s1 = arr2d[:,1:3]
print("取连续多列:\n",s1)
s2 = arr2d[:,[0,2]]
print("取不连续的多列:\n",s2)
d = arr2d[0:3,0:2]
print("取3⾏2列:\n",d)
a = arr2d[[0,2],[1,2]]
print("取第0⾏第2个元素&最后⼀个元素:\n",a)
布尔型索引的基本使⽤:
布尔型索引指的是将⼀个布尔数组作为数组索引,
返回的数据是布尔数组中True对应位置的值。
arr = np.arange(16).reshape(4,4)
print(arr)
# 创建 mask 布尔数组 [1,0,1,0]
mask = np.array([1,0,1,0],dtype = np.bool)# 索引[0,2] 为 True
# ⽤ mask 索引第1、3⾏中第3列的元素
print(mask)
arr[mask,2]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论