In [1]:
import numpy as np
np.__version__
Out[1]:
向量初始化
普通初始化
In [2]:
a = np.array([1., 2., 3.])
a
Out[2]:
In [3]:
a.dtype
Out[3]:
In [4]:
a.shape
Out[4]:
In [5]:
b = np.zeros(3, dtype=np.int32)
(b, b.dtype, b.shape)
Out[5]:
In [6]:
c = np.zeros_like(a)
(c, c.dtype, c.shape)
Out[6]:
由于在数组末尾没有预留空间以快速添加新元素,Numpy 数组无法像 Python 列表那样增长。因此,通常的处理方式包括:
- 在变长 Python 列表中准备好数据,然后将其转换为 Numpy 数组
- 使用
np.zeros
预先分配必要的空间 (如上 b 向量) - 使用
np.zeros_like
创建一个与某一变量形状一致的空数组。(如上 c 向量)
不止零数组,还有以下方法
In [7]:
np.ones(3)
Out[7]:
In [8]:
np.ones_like(a)
Out[8]:
In [9]:
np.empty(3)
Out[9]:
In [10]:
np.empty_like(a)
Out[10]:
In [11]:
np.full(3, 7.)
Out[11]:
In [12]:
np.full_like(a, 7.)
Out[12]:
单调序列初始化
还可以通过单调序列初始化数组,基本语法如下
np.arange(start, stop, step)
np.linspace(start, stop, num)
In [13]:
np.arange(6)
Out[13]:
In [14]:
np.arange(2, 6)
Out[14]:
In [15]:
np.arange(1, 6, 2)
Out[15]:
In [16]:
np.linspace(0, 0.5, 6)
Out[16]:
随机初始化
均匀分布,
In [17]:
np.random.randint(0, 10, 3)
Out[17]:
In [18]:
np.random.uniform(0, 10, 3)
Out[18]:
均匀分布,
In [19]:
np.random.rand(3)
Out[19]:
正态分布,,
In [20]:
np.random.randn(3)
Out[20]:
正态分布,,
In [21]:
np.random.normal(5, 2, 3)
Out[21]:
向量索引
In [22]:
a = np.arange(1, 6)
a
Out[22]:
In [23]:
a[1]
Out[23]:
In [24]:
a[2:4]
Out[24]:
In [25]:
a[-2:]
Out[25]:
In [26]:
a[::2]
Out[26]:
In [27]:
a[[1,3,4]]
Out[27]:
所有索引方法本质上都是 views: 它们并不存储数据,如果原数组在被索引后发生更改,则会反映出原始数组中的更改。如果需要复制数组,可以用 copy
方法。
In [28]:
b = a.copy()
a[2:4] = 0
a
Out[28]:
In [29]:
b
Out[29]:
向量运算
基础运算
得益于 Numpy 的广播特性,这里就不一一举例了
向量内积和外积
In [30]:
a = np.array([1, 2])
b = np.array([3, 4])
np.dot(a, b)
Out[30]:
In [31]:
np.cross(a, b)
Out[31]:
常用函数
In [32]:
np.sqrt([4, 9])
Out[32]:
In [33]:
e = np.exp([1, 2])
e
Out[33]:
In [34]:
np.log(e)
Out[34]:
In [35]:
np.sin([np.pi, np.pi/2])
Out[35]:
In [36]:
np.arcsin([0, 1])
Out[36]:
In [37]:
np.max([1, 2, 3])
Out[37]:
In [38]:
np.argmax([1, 2, 3])
Out[38]: