一维数据由对等关系的有序或无序数据构成,采用线性方式组织;
3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376
对应列表、数据和集合等概念。
列表和数组
3.1413, 'pi', 3.1404, [3.1401, 3.1349], '3.1376'
二维数据由多个一维数据组成,是一维数据的组合形式。例如:表格;
多维数据由一维或二维数据在新维度上扩展而成,比如:三年的中国大学排名表,它是二维数据表格在时间维度上的扩展。
NumPy是一个开源的Python科学计算基础库,它具有如下特点:
引入NumPy库的同时需要将他命名为约定俗成的别名:np
import numpy as np
例:计算A^2 + B^3 ,其中A和B是一维数组。使用普通Python语言编程如下:
def pySum():
a = [0, 1, 2, 3, 4]
b = [9, 8, 7, 6, 5]
c = []
for i in range(len(a))
c.append(a[i] ** 2 + b[i] ** 3)
return c
print(pySum())
可以看到,在进行计算时,必须通过循环的逻辑,具体到数组的具体元素之间的运算,不直观也不方便。
使用NumPy编程如下:
def npSum():
a = np.array([0, 1, 2, 3, 4])
b = np.array([9, 8, 7, 6 ,5])
c = a ** 2 + b ** 3
return c
print(npSum())
可以看到,借助NumPy的帮助,程序员可以直接把数组看做具体元素,直接进行运算,大大简化了步骤。
ndarray是一个多维数组对象,由两部分构成:实际的数据,描述这些数据的元数据(数据维度、数据类型等)。
ndarray数组一般要求数组中所有元素类型相同,数组下标从0开始。
使用如下命令生成一个ndarray数组;
np.array()
ndarray输出成[]形式,元素由空格分离。他有两个基本参量:轴(保存数据的维度)与秩(轴的数量)。
ndarray对象的属性
ndarray数组的创建方法
从Python中的列表、元祖等类型创建ndarray数组
np.array(list/tuple)
在创建数组时可以使用dtype来指定数组中元素的数据类型:
np.array(list/tuple, dtype = np.float32)
使用NumPy中创建ndarray数组的函数,如ones,zeros等
x = np.ones((2, 3, 4))
x.shape
输出结果:(2, 3, 4)
a = np.linspace(1, 10, 4)
b = np.linspace(1, 10, 4, endpoint = False)
输出结果:
a = array([1., 4,. 7,. 10.])
b = array([1., 3.25, 5.5, 7.75])
其中,endpoint = False表示end值不作为数组的最后一个元素。
np.concatenate((a, b)):将a,b数组合并,b数组直接接在a数组后面。
.reshape(shape):数组元素和总个数不变,返回一个shape形状的数组,原数组不变;
.flatten():对数组进行降维,返回折叠后的一维数组,原数组不变。
ndarray数组的类型变换
.astype(new_type):将原数组中的元素类型修改为new_type,原数组不变。
ndarray数组向列表转换
.tolist():将原数组转换为Python中的列表类型。
ndarray数组的索引和切片
a = np.array([9, 8, 7, 6, 5])
a[1 : 4 : 2]
输出结果:array([8, 6]);
a = np.arange(24).reshape((2, 3, 4))
a[1, 2, 3]
a[0, 1, 2]
a[-1, -2, -3]
输出结果:23 6 17
a = np.arange(24).reshape((2, 3, 4))
a[:, 1, -3]
a[:, 1 : 3, :]
a[:, :, ::2] #以2为步长获取其中的值
输出结果:
array([5, 17])
array([[[4, 5, 6, 7],
[8, 9, 10, 11]],
[[16, 17, 18, 19],
[20, 21, 22, 23]]])
array([[[0, 2],
[4, 6],
[8, 10]],
[[12, 14],
[16, 18],
[20, 22]]])
ndarray数组的运算
a = np.arange(24).reshape((2, 3, 4))
a = a / a.mean()
输出结果为一个2层3行4列的数组,数组中的每个元素是原来a中的每个元素除以原来a中所有元素平均值的商
np.abs(x), np.fabs(x) #计算数组个元素的绝对值
np.sqrt(x) #计算数组个元素的平方根
np.square(x) #计算数组各元素的平方
np.log(x), np,log10(x), np.log2(x) #计算数组个元素的自然对数、10底对数和2底对数
np.ceil(x), np.follor(x) #计算数组个元素的向上取整值和向下取整值
np.rint(x) #计算数组个元素的四舍五入值
np.modf(x) #将数组个元素的小数和整数部分以两个独立数组形式返回
np.cos(x), np.cosh(x) #计算数组各元素的普通型和双曲型三角函数
np.exp(x) # 计算数组个元素的符号值,1代表+,-1代表-,0代表值为0
这些函数都是新生成数组作为结果,原数组不变。
+ - * / ** #两个数组各元素进行对应运算
np.maximum(x, y), np.fmax() #元素级的最大值计算
np.minimum(x, y), np,fmin() #元素级的最小值计算
np.mod(x, y) #元素级的模运算
np,copysign(x, y) #将数组y中各元素值得符号赋值给数组x对应元素
> < >= <= == != #算数比较,产生布尔型数组