序言:
当你学习NumPy不难会遇到以下几个内容:
- ndarray,一种高效多维数组,提供了基于数组的便捷算术操作以及灵活的广播功能。
- 对所有数据进行快速的矩阵计算,而无须编写循环程序。
- 对硬盘中数组数据进行读写的工具,并对内存映射文件进行操作。
- 线性代数、随机数生成以及傅里叶变换功能。
- 用于连接NumPy到C、C++和FORTRAN语言类库的c语言api
NumPy本身并不提供建模和科学函数,理解NumPy的数组以及基于数组的计算将帮助你更高效地使用基于数组的工具,比如pandas(之后会更新)。
1.多维数组对象
N-维数组对象——ndarray。ndarray是Python中一个快速、灵活的大型数据集容器。数组允许你使用类似于标量的操作语法在整块数据上进行数据计算。
首先我们试着导入Numpy,再生成一个小的随机数组。导入时输入以下代码。
import numpy as np
生成随机数组:
data = np.random.randn(2, 3)
print(data)
r = data * 10
print(r)
生成结果:
[[-1.13953094 -0.72295056 1.38571422]
[-0.82690695 0.15555587 -2.02832253]]
--------------------------------1
[[-11.39530944 -7.22950564 13.85714218]
[ -8.26906948 1.55555867 -20.28322527]]
随机生成了一个2行3列的数组,然后在第3行操作中,所有的元素都同时乘以10.
其每一个数组都有shape属性,用来表征数组每一维度的数量
a = data.shape
print(a)
-----------------------------------
(2, 3)
其每一组数组都有dtype属性,用来表征数组的数据类型
b = data.dtype
print(b)
---------------------------------
float64
1.1 生成ndarray
生成数组最简单的方式就是使用array函数。array函数接收任意的序列型对象(列表、元组,也包括其他数组等),生成一个新的包含传递数据的NumPy数组。
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
print(arr1)
-------------------------------------
[6. 7.5 8. 0. 1. ]
嵌套序列,包含列表的列表,生成二维数组
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
print(arr2)
--------------------------------------------
[[1 2 3 4]
[5 6 7 8]]
除了array,我们还可以使用其他函数生成数组
使用zeros函数可以一次性创造全0数组
arr3 = np.zeros((3, 6))
print(arr3)
--------------------------------
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
使用ones函数可以一次性创造全1数组
arr4 = np.ones((2, 10))
print(arr4)
--------------------------------------------
[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
empty则可以创建一个没有初始化数值的数组。
arr5 = np.empty((2, 3, 2))
print(arr5)
-----------------------------------------
[[[6.23042070e-307 1.42417221e-306]
[1.37961641e-306 1.60220528e-306]
[8.45596650e-307 9.34611148e-307]]
[[1.24610383e-306 1.69118108e-306]
[8.06632139e-308 1.20160711e-306]
[1.69119330e-306 1.29062229e-306]]]
数组生成函数表
函数名 | 描述 |
array | 将输入数据(可以是列表、元组、数组以及其他序列)转换为ndarray,如不显式指明数据类型, 将自动推断;默认复制所有的输入数据 |
asarray | 将输入转换为ndarray,但如果输入已经是ndarray则不再复制 |
arange | python内建函数range的数组版,返回一个数组 |
ones | 根据给定形状和数据类型生成全1数组 |
ones_like | 根据所给的数组生成一个形状一样的全1数组 |
zeros | 根据给定形状和数据类型生成全0数组 |
zeros_like | 根据所给的数组生成一个形状一样的全0数组 |
empty | 根据给定形状生成一个没有初始化数值的空数组 |
empty_like | 根据所给的数组生成一个形状一样但没有初始化数值的空数组 |
full | 根据给定形状和数据类型生成指定数值的数组 |
full_like | 根据所给的数组生成一个形状一样但内容是指定数值的数组 |
eye,identity | 生成一个NxN特征矩阵(对角线位置都是1) |