从零开始的python数据分析(三)

  • Post author:
  • Post category:python




导入NumPy库

一般来说,习惯将numpy库简化为np

import numpy as np



生成NumPy数组



利用序列生成

如果构造NumPy数组的数据源类型不统一(这里的“不统一”主要是指精度上存在差异,更高层次上是统一的,比如说都是数值型的),且这些数据类型可以相互转换,那么NumPy会遵循“就高不就低”(upcast)的规则进行类型转换,比如说列表中的数据有整数,也有浮点数,NumPy会把所有数据都转换为浮点数,这是因为浮点数的精度更高。通过类型转换,NumPy数组的数据源类型能保持统一。

可以用astype函数显式指定转换数组的类型,如下代码会将np数组转换成32位整型数组。

import numpy as np
arr1=[1,2,3,4,5]
arr1=np.array(arr1)
arr1=arr1.astype(np.int32)
arr1

如果数据序列是嵌套的,且嵌套序列是等长的,则通过array()方法可以把嵌套的序列转为与嵌套级别适配的高维数组。



利用函数形成数组

除了利用数据序列生成NumPy数组,我们还可以使用特定的方法,如np.arange()来生成。

arrange(start,stop,step,dtype)
arr=np.arange(1,10,1,'int32')
#OUT array([1, 2, 3, 4, 5, 6, 7, 8, 9])

arrange()根据start与stop指定的范围及step设定的步长,生成一个ndarray对象。start为起始值,默认为0。stop为终止值。取值区间是左闭右开的,即stop这个终止值是不包括在内的。step为步长,如果不指定,默认值为1。dtype指明返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。arrange()方法的使用与Python的内置函数range()十分类似。两者都能均匀地等分区间,但range()仅可用于循环迭代。


np.arange返回的数组,不仅可以直接输出,还可以当作向量,参与到实际运算当中。



其他生成方式

可以利用np.zeros()、np.ones()等函数,生成指定维度和填充固定数值的数组。其中,np.zeros()函数生成的数组由0来填充,np.ones()生成的数组由1来填充,它们通常用来对某些变量进行初始化。

zero=np.zeros(shape=(3,4))
#array([[0., 0., 0., 0.],
#       [0., 0., 0., 0.],
#       [0., 0., 0., 0.]])
one=np.ones(shape=(3,4))
#array([[1., 1., 1., 1.],
#       [1., 1., 1., 1.],
#       [1., 1., 1., 1.]])

还有一种初始化的方式是np的zeros_like()函数,它可以将给定的数组所有值置为0,同样的还有ones_like()

(将给定数组置为1)

empty_like():

(产生和给定数组尺寸和类型相同的数组,但该数组中的元素没有被初始化)

full_like():

(产生和给定数组尺寸和类型相同的数组,该数组中的元素都被初始化为某个给定值)



np库中的重要功能 ——N维数组

一个N维数组就是一个通用的同类数据容器,也就是说它包含的每个元素数据类型均相同。每个数组的维度都由一个ndim属性来描述。

import numpy as np

arr=np.arange(1,10)
arr.ndim
# 1

对于N维数组而言,它还有一个重要的属性—shape(数组的形状)。形状主要用来表征数组每个维度的数量。一维数组的形状就是它的长度。

import numpy as np

arr=np.arange(1,10)
arr.shape
#(9,)

NumPy数组形状并不是一成不变的,可以通过reshape()方法将原有数组进行重构。

import numpy as np

arr=np.arange(1,10)
arr=arr.reshape(3,3)
arr
#array([[1, 2, 3],
#       [4, 5, 6],
#       [7, 8, 9]])
arr.shape			#(3,3)
arr.ndim			#2

这里需要注意的是,NumPy表示三维数组维度信息的方式和我们通常的认知稍有不同。比如,我们想创建两个3行5列的数组,它的形状参数为(2, 3, 5),而不是(3,5, 2)



版权声明:本文为m0_48866610原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。