numpy基础

python基础

启动shell

ipython

启动jupyter notebook

jupyter notebook
jupyter notebook --port 9999

数据结构

list = [val1,val2,val3,val4]
dict = {key1:val1,key2:val2}
tuple = (val1,val2,val3,val4)
set = {val1,val2,val3,val4}

  • 列表(list):

    1. 列表有顺序
    2. 列表元素可以修改
    3. 列表可以容纳任何对象
  • 字典(dictionary):

    1. 字典中的数据必须以键值对的形式出现
    2. 键不能重复,值可以重复
    3. 键不能修改,值可以修改
  • 元组(tuple):

    不可修改,类似稳定的列表

  • 集合(set):

    1. 无序
    2. 不重复
    3. 不能被切片+索引
    4. .可以修改

numpy

导入numpy

import numpy as np

理解Python中的数据类型

np.array 从 Python 列表创建数组:

## 整型数组:
np.array([1, 4, 2, 5, 3])
## 嵌套列表构成的多维数组
np.array([range(i, i + 3) for i in [2, 4, 6]])

从头创建数组

+ 创建一个长度为10的数组,数组的值都是0
np.zeros(10, dtype=int)
+ 创建一个3×5的浮点型数组,数组的值都是1 
np.ones((3, 5), dtype=float)
+ 创建一个3×5的浮点型数组,数组的值都是3.14 
np.full((3, 5), 3.14)
+ 创建一个3×5的浮点型数组,数组的值是一个线性序列 ## 从0开始,到20结束,步长为2
np.arange(0, 20, 2)
+ 创建一个5个元素的数组,这5个数均匀地分配到0~1 
np.linspace(0, 1, 5)
+ 创建一个3×3的、在0~1均匀分布的随机数组成的数组 
np.random.random((3, 3))
+ 创建一个3×3的、均值为0、方差为1的 正态分布的随机数数组
np.random.normal(0, 1, (3, 3))
+ 创建一个3×3的、[0, 10)区间的随机整型数组 
np.random.randint(0, 10, (3, 3))
+ 创建一个3×3的单位矩阵 
np.eye(3)
+ 创建一个由3个整型数组成的未初始化的数组,数组的值是内存空间中的任意值
np.empty(3)

数组的属性 :

确定数组的大小、形状、存储大小、数据类型。

.ndim
.shape
.size 
.dtype

数组的索引 :

获取和设置数组各个元素的值。

x[0]
x[-1]
##多维索引
x[0, 0]
## 修改元素的值
x[0 , 0] = 12 

数组的切分(slice) :

获取或设置更小的子数组。 x[ start: stop: step],返回视图

x[:5] ## 前五个元素
x[5:] ## 索引五之后的元素
x[4:7] ## 中间的子数组
x[::2] ## 每隔一个元素
x[1::2] ## 每隔一个元素,从索引1开始
x[::-1] ## 所有元素,逆序的
x[5::-2] ## 从索引5开始每隔一个元素逆序

多维子数组

x2[:2, :3] ## 两行,三列
x2[:3, ::2] ## 所有行,每隔一列
x2[::-1, ::-1] ## 逆序

获取数组的行和列 :索引与切片组合起来实现这个功能

print(x2[:, 0]) ## x2的第一列
print(x2[0, :]) ## x2的第一行
print(x2[0]) ##等于x2[0, :]

非副本视图的子数组

.copy()  ## 创建数组的副本

数组的变形 :改变给定数组的形状。

x = np.array([1, 2, 3])
## 通过变形获得的行向量 x.reshape((1, 3))
## 通过newaxis获得的行向量 x[np.newaxis, :]
## 通过变形获得的列向量 x.reshape((3, 1))
## 通过newaxis获得的列向量 x[:, np.newaxis]

数组的拼接和分裂 :

拼接:np.concatenate、np.vstack 和 np.hstack

np.concatenate([x, y])
## 沿着第一个轴拼接 
np.concatenate([x, y])
## 沿着第二个轴拼接(从0开始索引) 
np.concatenate([x, y], axis=1)
## 垂直栈数组 
np.vstack([x, y])
## 水平栈数组
np.hstack([x, y])

分裂:np.split、np.hsplit 和 np.vsplit

x1, x2, x3 = np.split(x, [3, 5]) ## [3, 5]第3个和第5个未知是分割点
upper, lower = np.vsplit(grid, [2])
left, right = np.hsplit(grid, [2])