Python数据分析(六) —— numpy创建数组的基本操作

Numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。numpy的快速、方便使得其运用广泛。

目录

1、Ndarray对象的生成

使用np.array()生成ndarray对象

使用np.arange()生成ndarray对象

生成浮点型ndarray对象

生成bool型的ndarray对象

2、Ndarray对象类型的转换

不同ndarry对象类型的转换

Ndarray对象类型的小数变换

3、Ndarray多维对象的生成

多维数组的生成

不同维度数组的转换


1、Ndarray对象的生成

使用np.array()生成ndarray对象

import numpy as np
import random

# 使用array生成数组,得到ndarray的类型
a = np.array([1, 2, 3])
print(a)
print(type(a))

运行结果如下:

Python数据分析(六) —— numpy创建数组的基本操作_第1张图片

可以看出np.array生成了一个一行三列的数组对象,数据的类型为ndarray,ndarray 对象是用于存放同类型元素的多维数组。

使用np.arange()生成ndarray对象

arange里面的参数包括起点,终点,步长。看例子:

# 使用arange生成数组,得到ndarray的类型
b = np.arange(0, 12, 2)
print(b)
print(type(b))

运行结果如下图:

可以看出,同样生成了ndarray对象,同时可以发现,arange()与range()用法相似,都是含头不含尾。但是需要注意array里面的参数数据对象需要用[ ]装起来,不然会有问题。具体问题是什么大家可以试一下,不会报错,但数据有问题。

生成浮点型ndarray对象

生成是浮点数的ndarray对象,主要在参数中添加dtype=‘float32’即可!代码如下:

# 生成浮点型的ndarray
c = np.array(range(1, 6, 1), dtype='float32')
print(c)
print(type(c))

运行结果如下图:

Python数据分析(六) —— numpy创建数组的基本操作_第2张图片

生成了浮点数1,2,3,4,5 。既然有浮点数,那么是不是也有bool型呢?

生成bool型的ndarray对象

生成bool类型和浮点型一样,只需要修改dtype类型为bool即可。见代码:

# 生成bool型的ndarray
d = np.array([1, 0, 1, 0, 1, 1, 1], dtype='bool')
print(d)
print(type(d))

运行结果如下:

很明显可以看出,生成了True和False的bool类型的ndarray对象,也就是bool数组。

2、Ndarray对象类型的转换

不同ndarry对象类型的转换

在使用时,往往可能需要对数组的类型进行转换,比如将bool型显示成1和0;把整型转化成浮点型,需要使用astype()函数,括号里面为转换的类型。代码如下:

# 将bool型转化为整型
e = d.astype('int8')
print(e)
print(e.dtype)
print(type(e))

# 将整型转化为浮点型
f = e.astype('float32')
print(f)
print(f.dtype)
print(type(f))

运行结果如下:

Python数据分析(六) —— numpy创建数组的基本操作_第3张图片

 

我们将bool类型的数组,通过astype()转化成了整型和浮点型的ndarray对象。通过dtype看得出来生成了int8型和float32型,即整型和浮点型。

Ndarray对象类型的小数变换

往往在生成adarray数组对对象时会生成有很多为小数点的小数,那么如何对小数点部分进行保留呢?可以通过np.round()函数对小数进行位数保留。代码如下:

# 生成0-1的一维数组
g = np.array([random.random() for i in range(10)])
print(g)
print(g.dtype)

# 对g保留两位小数
h = np.round(g, 2)
print(h)
print(h.dtype)

运行结果如下:

Python数据分析(六) —— numpy创建数组的基本操作_第4张图片

通过random.random()可以生成一个(0,1)的实数,可以看到生成的数据小数点后有八位。如果我们只需要两位,可以通过np.round()函数,设置参数为2,保留两位小数。保留位数后,数组的类型没有发生变化。

1、2部分的完整代码如下:

import numpy as np
import random

# 使用array生成数组,得到ndarray的类型
a = np.array([1, 2, 3])
print(a)
print(type(a))

# 使用arange生成数组,得到ndarray的类型
b = np.arange(0, 12, 2)
print(b)
print(type(b))

# 生成浮点型的ndarray
c = np.array(range(1, 6, 1), dtype='float32')
print(c)
print(type(c))

# 生成bool型的ndarray
d = np.array([1, 0, 1, 0, 1, 1, 1], dtype='bool')
print(d)
print(type(d))

# 将bool型转化为整型
e = d.astype('int8')
print(e)
print(e.dtype)
print(type(e))

# 将整型转化为浮点型
f = e.astype('float32')
print(f)
print(f.dtype)
print(type(f))

# 对小数点位数进行保留操作
g = np.array([random.random() for i in range(10)])
print(g)
print(g.dtype)

# 对g保留两位小数
h = np.round(g, 2)
print(h)
print(h.dtype)


3、Ndarray多维对象的生成

多维数组的生成

如何生成二维的数组呢?大胆猜想一下,是不是需要在array()里面传递两个参数呢?看代码:

import numpy as np
import random

# 二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.shape)

# 三维数组
b = np.array([[[1, 2, 3], [4, 5, 6]]])
print(b)
print(b.shape)

运行结果如下:

Python数据分析(六) —— numpy创建数组的基本操作_第5张图片

同样是1,2,3,4,5,6生成的数组怎么一个是2x3一个是1x2x3呢?细心的人会发现b的array中的[ ]比a中多一对,相信聪明的人已经猜出来了。没错,多少对[ ]就会生成几维数组。

不同维度数组的转换

不同维度的数组是不是能相互转换呢?答案是肯定的,通过reshape()对数组的维度进行转换。比如把刚才的三维数组转化为一维数组,见代码:

# 三维数组转化为一维数组
c = b.reshape(6)
print(c)
print(c.shape)

 运行结果如下:

可以看到数组变成了一维。可能有的小伙伴在想,为什么只在reshape()里面写个6,一维的六个数,不应该是reshape(1,6)吗?问得好,代码试一下:

d = b.reshape(1, 6)
print(d)
print(d.shape)

 运行结果如下:

很明显,生成了一个二维数组。这是为什么呢?在reshape中,括号里面有几个数,就会生成几维数组。

在numpy中有一个维度拉伸函数,flatten()可以将高维度的数组直接拉伸为一维数组,比如将刚才的三维数组通过flatten()拉伸到一维。代码如下:

# 通过flatten将高维数组拉伸到一维数组
e = b.flatten()
print(e)
print(e.shape)

运行结果如下:

显而易见,三维数组直接被拉伸到一维,是不是很方便!!!

整体代码如下:

import numpy as np
import random

# 二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.shape)

# 三维数组
b = np.array([[[1, 2, 3], [4, 5, 6]]])
print(b)
print(b.shape)

# 三维数组转化为一维数组
c = b.reshape(6)
print(c)
print(c.shape)

d = b.reshape(1, 6)
print(d)
print(d.shape)

# 通过flatten将高维数组拉伸到一维数组
e = b.flatten()
print(e)
print(e.shape)

总结:这篇文章主要写了一些numpy的基本操作,包括数组的生成(一维、多维),同时讲解了不同维度数组的 转化,以及不同类型数组的转化,让大家对数组有个整体直观的认识。后续会对numpy有更深,更为实用的讲解。

 

你可能感兴趣的:(Python数据分析,numpy,python,数据分析,数据可视化)