一、对 Numpy 认识
Numpy 是用于数据科学计算的基础,不但能够完成科学计算任务,还能被用作高效地多 维数据容器。用于存储和处理大型矩阵
Python 提供了一个 array 模块,和 list 不同,它直接保存数值,但是由于 Python 的 array 模块不支持多维,也没有各种运算函数
Numpy 弥补了这一遗憾,Numpy 提供了一种数组对象—ndarray(下文统称数组)
关于 ndarray 数组对象的认识:
是一种内存连续的、存储单一数据类型的、可以存储多维数组的对象
存在两种存储方式:
C 风格存储(C 语言风格) ----行优先存储
F 风格存储(Fortran 语言风格)—列优先存储
二、数组创建
1、Numpy.array 函数创建一维或多维数组
numpy.array (object,dtype=None,copy=True,order=‘K’,subok=False,ndmin=0)
参数名称 | 说明 |
---|---|
object | 接收 array,表示想要创建的数组,无默认 |
dtype | 接收 data-type。表示数组所需的数据类型。如果未给定,则选择保存对象 所需的最小类型。默认为 None |
ndmin | 接收 int,指定生成数组应该具有的最小维数,默认为 None |
三、数组属性
Ndarray 是一个数组对象,对象都拥有以下属性:
属性 | 说明 |
---|---|
ndim | 返回 int,表示数组的维数 |
shape | 返回 tuple。表示数组的尺寸,对于 n 行 m 列的矩阵,形状为(n,m) |
size | 返回 int,表示数组的元素总数,等于数组形状的乘积 |
dtype | 返回 data-type,描述数组中元素的类型 |
itemsize | 返回 int,表示数组的每个元素的大小(以字节为单位) |
其中 shape 及 ndim 属性,可以参考下图来理解:
代码实现:
# 1、导包
import numpy as np
# 2、创建数组
# 可以使用np.array将列表对象转化ndarray数组对象
# arr = np.array([1, 2, 3, 4])
# print('arr:\n', arr) # [1 2 3 4]
# print('arr 类型:\n', type(arr)) # <class 'numpy.ndarray'>
#
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 0]])
print('arr:\n', arr)
# [[1 2 3 4]
# [5 6 7 8]]
print('arr 类型:\n', type(arr)) # <class 'numpy.ndarray'>
print('*' * 100)
# arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 0]],[[1, 2, 3, 4], [5, 6, 7, 0]]])
# print('arr:\n', arr)
# # [[1 2 3 4]
# # [5 6 7 8]]
#
# print('arr 类型:\n', type(arr)) # <class 'numpy.ndarray'>
# # print('*' * 100)
# 3、研究数组对象属性
# ndim shape size dtype itemsize
print('arr 的 ndim属性:', arr.ndim) # 数组的维度
print('arr 的 shape属性:', arr.shape) # 数组的形状,元组类型
print('arr 的 size 属性:', arr.size) # 数组中元素的个数
# print('arr 的 dtype 属性:', arr.dtype) # 数组中元素的数据类型 int32 --->numpy中的数据类型 --->32位平台的int类型
# print('arr 的 itemsize 属性:', arr.itemsize) # 每一个元素的占位大小,单位为字节
# ndim shape size
# len(shape) = ndim
# size = shape中元素的乘积
四、数据元素类型
在实际业务数据处理时,为了更精确的计算结果,需要使用不同的数据类型,Numpy 极大程度地扩充了原生python数据类型,其中大部分数据类型是以数字结尾的,这个数字表 示在内存中占有的位数,同时强调一点,在Numpy中,所有数据类型都是同质的,即数组中的所有元素类型必须是一致的,这样做的好处是,更容易确定该数组所需要的存储空间
如下表展示:
类型 | 描述 |
---|---|
bool | 用一位存储的布尔类型(值为 TRUE 或 FALSE) |
inti | 由所在平台决定其精度的整数(一般为 int32 或 int64) |
int8 | 整数,范围为−128 至 127 |
int16 | 整数,范围为−32768 至 32767 |
对于数组元素类型的使用,可以在创建数组的时候,通过 dtype 参数来指定数组的元素 类型,如:在创建全部为 0,全部为 1 的数组的时候,就可以使用 dtype 参数
其实,numpy 中的数据类型也可以进行强制转换,也可以进行存储复合的数据,如:
import numpy as np
# numpy中的数据类型
# ---封装了Python中的数据类型,并进行了细致划分 ---->变为了numpy.数据类型
# np.int32 np.int64 np.float32 np.float64 .......
# (1) 可以在创建数组的 时候通过dtype参数来指定创建的数组的类型
arr = np.array([1, 2, 3, 4], dtype=np.float64)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)
arr = np.array([1, 2, 3, 4], dtype=np.int64)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)
# 创建一个bool数组
# 注意:0代表False 非0代表True
arr = np.array([1, 2, 3, 0], dtype=np.bool)
print('arr:\n', arr) # [ True True True False]
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)
# (2) 也可以进行数据的强转换
print('将数值转化为bool类型:',np.bool(1))
print('将整型数据转化为float类型:',np.float32(3))
# print('将字符串a转化为float类型:',np.float64('a')) # 错误的
print('将字符串10转化为float类型:',np.float64('10'))
# # (3)了解、知道:ndarray可以存储不同类型的数据 --->转化 ---对象类型
# # 存储 ---个人信息---姓名(str) height(float) weight(float)
# # 通过自定义dtype来实现
df = np.dtype([('name', np.str, 20), (