NumPy学习1

NumPy 是 Numerical Python 的缩写,它是一个由多维数组对象(ndarray)和处理这些数组的函数(function)集合组成的库。
使用 NumPy 库,可以对数组执行数学运算和相关逻辑运算。
NumPy 不仅作为 Python 的扩展包,它同样也是 Python 科学计算的基础包。

NumPy使用需求
随着数据科学(Data Science,简称 DS,包括大数据分析与处理、大数据存储、数据抓取等分支)的蓬勃发展,
像 NumPy、SciPy(Python科学计算库)、Pandas(基于NumPy的数据处理库)等数据分析库都有了大量的增长,它们都具有较简单的语法格式。

在矩阵乘法与数组形状处理上,NumPy 有着非常不错的性能,再加上 NumPy 的计算速度很快,这些都是 NumPy 成为一款数据分析工具的重要原因。
数组形状可以理解为数组的维度,比如一维数组、二维数组、三维数组等;以二维数组为例,改变数组形状就是交换数组的行和列,也即将数组旋转 90 度。

NumPy 可以很便捷高效地处理大量数据,那么使用 NumPy 做数据处理有哪些优点呢?总结如下:
NumPy 是 Python 科学计算基础库;
NumPy 可以对数组进行高效的数学运算;
NumPy 的 ndarray 对象可以用来构建多维数组;
NumPy 能够执行傅立叶变换与重塑多维数组形状;
NumPy 提供了线性代数,以及随机数生成的内置函数。

NumPy应用场景
NumPy 通常与 SciPy(Python科学计算库)和 Matplotlib(Python绘图库)等软件包组合使用,这种组合方式被用来广泛地代替 MatLab 的使用。

MatLab 是一款强大的数学计算软件,广泛应用在数据分析、电子通信、深度学习、图像处理、机器视觉、量化金融等领域,
但近些年随着 Python 语言的迅猛发展,Python 被看作是一种更适合代替 MatLab 的编程语言。

numpy_test1.py :
import numpy
import numpy as np


'''
0, NumPy下载与安装
pip install numpy
'''

'''
1, NumPy ndarray对象
NumPy 定义了一个 n 维数组对象,简称 ndarray 对象,它是一个一系列相同类型元素组成的数组集合。
数组中的每个元素都占有大小相同的内存块,您可以使用索引或切片的方式获取数组中的每个元素。
ndarray 对象有一个 dtype 属性,该属性用来描述元素的数据类型 。

ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列,
常用的布局方式有两种,即按行或者按列。
'''

'''
1) 创建ndarray对象
通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:
numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)

下面表格对其参数做了说明:

参数说明
序号    参数    描述说明
1    object    表示一个数组序列。
2    dtype    可选参数,通过它可以更改数组的数据类型。
3    copy    可选参数,表示数组能否被复制,默认是 True。
4    order    以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)。
5    ndmin    用于指定数组的维度。
'''
print("----创建ndarray对象----")
# 使用列表构建一维数组
a1 = numpy.array([1, 2, 3, 4, 5, 6])
print(a1)
# [1 2 3 4 5 6]
print(type(a1))
# <class 'numpy.ndarray'>    ndarray数组类型

# 创建多维数组
b1 = numpy.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(b1)
'''
[[1 2 3 4]
 [5 6 7 8]]
'''
# 如果要改变数组元素的数据类型,可以使用通过设置 dtype
c1 = numpy.array([1, 3, 4, 7], dtype="float32")
print(c1)
# [1. 3. 4. 7.]

'''
2) ndim 查看数组维数
'''
print("----ndim 查看数组维数----")
arr1 = numpy.array([[1, 2, 3, 4], [9, 10, 11, 13]])
print(arr1.ndim)
# 也可以使用 ndmin 参数创建不同维度的数组
arr2 = numpy.array([1, 2, 3, 4], ndmin=2)
print(arr2)

'''
3) reshape数组变维
数组的形状指的是多维数组的行数和列数。Numpy 模块提供 reshape(i, j) 函数可以改变多维数组行数i和列数j,
从而达到数组变维的目的。因此数组变维即对数组形状的重塑。
2 × 3 --reshape函数数组变维-> 3 × 2

-- numpy 一般取别名 np
import numpy as np
'''
print("----reshape数组变维----")
e1 = np.array([[1, 3], [2, 4], [3, 6]])    # 3行2列
print("原数组", e1)
#变维 2行3列,并不是矩阵的转置方式变维,而是下面最近的数据往上移动变维.
e2 = e1.reshape(2, 3)
print("新数组", e2)
'''
原数组 [[1 3]
 [2 4]
 [3 6]]
新数组 [[1 3 2]
 [4 3 6]]
'''

e3 = np.array([[1, 3, 4, 5], [2, 4, 6, 7], [3, 6, 9, 8]])    # 3行4列
print("原数组", e3)
#变维 4行3列,并不是矩阵的转置方式变维,而是上面最后的数据往下移动变维.
e4 = e3.reshape(4, 3)
print("新数组", e4)
'''
原数组 [[1 3 4 5]
 [2 4 6 7]
 [3 6 9 8]]
新数组 [[1 3 4]
 [5 2 4]
 [6 7 3]
 [6 9 8]]
'''

'''
2, NumPy数据类型
NumPy 作为 Python 的扩展包,它提供了比 Python 更加丰富的数据类型,如下所示:
    NumPy数据类型
序号    数据类型    语言描述
1    bool_    布尔型数据类型(True 或者 False)
2    int_    默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64
3    intc    和 C 语言的 int 类型一样,一般是 int32 或 int 64
4    intp    用于索引的整数类型(类似于 C 的 ssize_t,通常为 int32 或 int64)
5    int8    代表与1字节相同的8位整数。值的范围是-128到127。
6    int16    代表 2 字节(16位)的整数。范围是-32768至32767。
7    int32    代表 4 字节(32位)整数。范围是-2147483648至2147483647。
8    int64    表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807。
9    uint8    代表1字节(8位)无符号整数。
10    uint16    2 字节(16位)无符号整数。
11    uint32    4 字节(32位)的无符号整数。
12    uint64    8 字节(64位)的无符号整数。
13    float_    float64 类型的简写。
14    float16    半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位。
15    float32    单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位。
16    float64    双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位。
17    complex_    复数类型,与 complex128 类型相同。
18    complex64    表示实部和虚部共享 32 位的复数。
19    complex128    表示实部和虚部共享 64 位的复数。
20    str_    表示字符串类型
21    string_    表示字节串类型

1) 数据类型对象
数据类型对象(Data Type Object)又称 dtype 对象,主要用来描述数组元素的数据类型、大小以及字节顺序。
同时,它也可以用来创建结构化数据。比如常见的 int32、float32、uint8 都是 dtype 对象的实例,其语法格式如下:
np.dtype(object)
'''
print("----数据类型对象----")
a1 = np.dtype(np.int32)
print(a1)

'''
2) 数据类型标识码
NumPy 中每种数据类型都有一个唯一标识的字符码,如下所示:

数据类型标识码
字符    对应类型
b    代表布尔型
i    带符号整型
u    无符号整型
f    浮点型
c    复数浮点型
m    时间间隔(timedelta)
M    datatime(日期时间)
O    Python对象
S,a    字节串(S)与字符串(a)
U    Unicode
V    原始数据(void)
'''
print("----数据类型标识码----")
# 使用数据类型标识码,创建一组结构化数据:
# 定义字段名 nums,以及数组数据类型i1
import numpy as np
dt = np.dtype([('nums','i1')])
print(dt)
a1 = np.array([(55,),(75,),(85,)], dtype = dt)
print(a1)
print(a1.dtype)
print(a1['nums'])

'''
3) 定义结构化数据
通常情况下,结构化数据使用字段的形式来描述某个对象的特征。

以下示例描述一位学生的姓名、年龄、分数的特征,该结构化数据其包含以下字段:
str 字段:name
int 字段:age
float 字段:score
'''
print("----定义结构化数据----")
student_dtype = np.dtype([('name','S20'), ('age', 'i1'), ('score', 'f2')])
#输出结构化数据 student
print(student_dtype)
#将其应用于ndarray对象
stu_array = np.array([('zhangsan', 16, 79.50),('lisi', 18, 86.80)], dtype = student_dtype)
print(stu_array)
'''
[('name', 'S20'), ('age', 'i1'), ('score', '<f2')]
[(b'zhangsan', 16, 79.5) (b'lisi', 18, 86.8)]
'''

'''
3, NumPy数组属性
Numpy 数组的常用属性

1) ndarray.shape
shape 属性的返回值一个由数组维度构成的元组,比如 3 行 2 列的二维数组可以表示为(3,2),
    该属性可以用来调整数组维度的大小。
'''
print("----NumPy数组常用属性----")
print("----ndarray.shape,属性的返回值一个由数组维度构成的元组----")
a1 = np.array([[1, 3], [2, 4], [3, 6]])
print("数组维度构成的元组:", a1.shape)
print("原数组:", a1)
# 通过 shape 属性修改数组的形状大小:功能类似 np.reshape(i,j)变维
a1.shape = (2,3)
print("新数组:", a1)
'''
数组维度构成的元组: (3, 2)
原数组: [[1 3]
 [2 4]
 [3 6]]
新数组: [[1 3 2]
 [4 3 6]]
'''

'''
2) ndarray.ndim
该属性返回的是数组的维数
'''
print("----ndarray.ndim,该属性返回的是数组的维数----")
#随机生成一个一维数组
c1 = np.arange(18)
print("一维数组:",c1)
print("一维数组维数:",c1.ndim)
#对数组进行变维操作
e1 = c1.reshape(2,3,3)
print("变维数组后:",e1)
print("变维数组后维数:",e1.ndim)
'''
一维数组: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17]
一维数组维数: 1
变维数组后: [[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]]
变维数组后维数: 3
'''

'''
3) ndarray.itemsize
返回数组中每个元素的大小(以字节为单位)
'''
#数据类型为int8,代表1字节
x1 = np.array([1, 3, 5], dtype = np.int8)
print("ndarray.itemsize 每个元素的大小(以字节为单位):",x1.itemsize)
'''
4) ndarray.flags
返回 ndarray 数组的内存信息,比如 ndarray 数组的存储方式,以及是否是其他数组的副本等
'''
print("ndarray.flags 内存信息 :",x1.flags)
'''
ndarray.flags 内存信息 :   C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
'''

 

 



posted @ 2023-05-23 20:09  PandaCode辉  阅读(15)  评论(0编辑  收藏  举报