为科学计算和数据科学设计的Python发行版:CanopyAnaconda

Anaconda

  • 包管理:Conda类似于pip

  • spyder:交互式Python语言开发环境

  • IPython是一个用于交互式计算的Python工具
    • a?获得a的信息
    • %魔术命令(Magic Commands)是特殊的命令,如%run demo.py执行当前目录下的demo.py。

NumPy库入门

NumPy是一个开源的Python科学计算基础库,包含:

  • 一个强大的N维数组对象ndarray
  • 广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数 、傅里叶变换、随机数生成等功能
    NumPy是SciPy、Pandas等数据处理或科学计算库的基础

数据的维度

维度 定义 表示方式
一维数据 一维数据由对等关系的有序或无序数据构成,采用线性方式组织 列表和集合类型
二维数据 二维数据由多个一维数据构成,是一维数据的组合形式 列表类型
多维数据 多维数据由一维或二维数据在新维度上扩展形成(如大学排名随年份变化,即时间维度) 列表类型
高维数据 高维数据仅利用最基本的二元关系展示数据间的复杂结构(如键值对) 字典类型或JSON、XML和YAML格式

Python中列表和NumPy数组的一些主要区别:

  • 列表是动态的,可以包含不同类型的元素(如整数、浮点数、字符串等)。
  • NumPy数组是静态的,通常所有元素都是相同类型的(例如,都是整数或都是浮点数)。

ndarray

  • ndarry更适合计算。
  • 由数据+元数据(数据维度、数据类型)
  • 轴(axis):保存数据的维度
  • 秩(rank):轴的数量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np

a = np.array([[0,1,2,3,4,],[9,8,7,6,5]])

a.ndim
Out[4]: 2

a.shape
Out[5]: (2, 5)

a.size
Out[6]: 10

a.dtype
Out[7]: dtype('int32')

a.itemsize
Out[8]: 4
  • 避免使用非同质对象如([[0,1,2,3,4,],[9,8,7,6]])

ndarray数组创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
np.arange(10)
Out[10]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.ones((3,6))
Out[11]:
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])

np.zeros((3,6), dtype = np.int32)
Out[12]:
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])

np.eye(5)
Out[13]:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])

x = np.ones((2,3,4))

print(x)
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]

[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]

x.shape
Out[18]: (2, 3, 4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = np.linspace(1,10,4)

a
Out[20]: array([ 1., 4., 7., 10.])


b = np.linspace(1,10,4,endpoint = False)

b
Out[23]: array([1. , 3.25, 5.5 , 7.75])

c = np.concatenate((a, b)) #要作为一个整体参数

c
Out[37]: array([ 1. , 4. , 7. , 10. , 1. , 3.25, 5.5 , 7.75])

ndarray数组的操作

  • 索引和切片和python相同
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

a = np.arange(24).reshape((2,3,4))

a
Out[39]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],

[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])

a[-1,-2,-3]
Out[40]: 17

a[:,1,-3]
Out[41]: array([ 5, 17])

a[:,1:3,:] #切片范围1,2。不包括3
Out[42]:
array([[[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],

[[16, 17, 18, 19],
[20, 21, 22, 23]]])

a[:,:,::2] #跳跃切片
Out[43]:
array([[[ 0, 2],
[ 4, 6],
[ 8, 10]],

[[12, 14],
[16, 18],
[20, 22]]])

ndarray的运算

各种函数……

NumPy数据的存取

存储

  • CSV(Comma-Separated Values,逗号分隔值)文件是一种常见的文本文件格式,用于存储表格数据。

存储一维和二维数据:

  • a = np.arange(100).reshape(5,20)

  • np.savetxt('a.csv',a,fmt='%d',delimiter = ',')存储csv文件

  • np.b = np.loadtxt('a.csv',delimiter = ',')加载csv文件

存储多维数据:

  • 我们需要将文件转化为对应的格式,即知道对应维度

  • a = np.arange(100).reshape(5,10,2)

  • a.tofile("b.dat",sep=",",format = '%d')存储csv文件

  • c = np.fromfile("b.dat",dtype = np.int32, sep=',').reshape(5,10,2)加载csv文件

使用npy文件存储:

  • 通过文件里包含维度信息来实现

  • np.save("a.npy",a)存储npy文件

  • b = np.load("a.npy")存储npy文件

随机数

通过np.random生成