专注于快乐的事情

NumPy学习

简介

NumPy 数组与 Python 内置的列表类型非常相似。但是随着数组在维度上变大,NumPy 数组提供了更加高效的存储和数据操作。
与Python 列表list相比,固定类型的 NumPy 式数组缺乏这种灵活性,但是能更有效地存储和操作数据。

测试

如果没有安装,pip3 install numpy

import numpy as np
np.__version__
Out[64]: '1.14.3'

操作

从Python列表创建数组

np.array([1, 4, 2, 5, 3])
np.array([1, 2, 3, 4], dtype='float32')


grid = np.array([[9, 8, 7],
...:             [6, 5, 4]])

NumPy 要求数组必须包含同一类型的数据。如果类型不匹配,NumPy 将会向上转换

不同于 Python 列表,NumPy 数组可以被指定为多维的

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×3的、均值为0、方差为1的

# 正态分布的随机数数组
np.random.normal(0, 1, (3, 3))

创建一个5个元素的数组,这5个数均匀地分配到0~1,等差数列
np.linspace(0, 1, 5)

创建一个1-20且差为3的等差数列

np.arange(1,20,3)

随机生成整数数据
x1 = np.random.randint(10, size=6) # 一维数组
x2 = np.random.randint(10, size=(3, 4)) # 二维数组
x3 = np.random.randint(10, size=(3, 4, 5)) # 三维数组

数据类型

参看数据类型

arry4.dtype

类型转换

arry4 = arry3.astype(np.float64)

数组切片:获取子数组

x[start:stop:step]

x = np.arange(10)

获取数组的行和列

一种常见的需求是获取数组的单行和单列。你可以将索引与切片组合起来实现这个功能,用一个冒号(:)表示空切片:

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

在获取行时,出于语法的简介考虑,可以省略空的切片:print(x2[0])

如何复制?

关于数组切片有一点很重要也非常有用,那就是数组切片返回的是数组数据的视图,而不是数值数据的副本。这一点也是 NumPy 数组切片和 Python 列表切片的不同之处:在 Python 列表中,切片是值的副本。

如果修改这个子数组,将会看到原始数组也被修改

创建数组的副本
x2_sub_copy = x2[:2, :2].copy()

NumPy数组的操作

NumPy数组的属性

每个数组有 nidm(数组的维度)、shape(数组每个维度的大小)和 size(数组的总大小)属性

#随机数

rand 可以生成[0,1)的随机多维数组。
npr.rand(3,2)

pip3 install matplotlib

参考网站

评论系统未开启,无法评论!