1.3.1.2 创建数组
1.3.1.2.1 手动构建数组
- 1-D:
In [9]:
a = np.array([0, 1, 2, 3])
a
Out[9]:
array([0, 1, 2, 3])
In [10]:
a.ndim
Out[10]:
1
In [11]:
a.shape
Out[11]:
(4,)
In [12]:
len(a)
Out[12]:
4
- 2-D,3-D,…:
In [13]:
b = np.array([[0, 1, 2], [3, 4, 5]]) # 2 x 3 数组
b
Out[13]:
array([[0, 1, 2],
[3, 4, 5]])
In [14]:
b.ndim
Out[14]:
2
In [15]:
b.shape
Out[15]:
(2, 3)
In [16]:
len(b) # 返回一个纬度的大小
Out[16]:
2
In [17]:
c = np.array([[[1], [2]], [[3], [4]]])
c
Out[17]:
array([[[1],
[2]],
[[3],
[4]]])
In [18]:
c.shape
Out[18]:
(2, 2, 1)
练习:简单数组
- 创建一个简单的二维数组。首先,重复上面的例子。然后接着你自己的:在第一行从后向前数奇数,接着第二行数偶数?
- 在这些数组上使用函数len()、numpy.shape()。他们有什么关系?与数组的
ndim
属性间呢?
1.3.1.2.2 创建数组的函数
实际上,我们很少一个项目接一个项目输入…
- 均匀分布:
In [19]:
a = np.arange(10) # 0 .. n-1 (!)
a
Out[19]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [20]:
b = np.arange(1, 9, 2) # 开始,结束(不包含),步长
b
Out[20]:
array([1, 3, 5, 7])
- 或者通过一些数据点:
In [1]:
c = np.linspace(0, 1, 6) # 起点、终点、数据点
c
Out[1]:
array([ 0\. , 0.2, 0.4, 0.6, 0.8, 1\. ])
In [2]:
d = np.linspace(0, 1, 5, endpoint=False)
d
Out[2]:
array([ 0\. , 0.2, 0.4, 0.6, 0.8])
- 普通数组:
In [3]:
a = np.ones((3, 3)) # 提示: (3, 3) 是元组
a
Out[3]:
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
In [4]:
b = np.zeros((2, 2))
b
Out[4]:
array([[ 0., 0.],
[ 0., 0.]])
In [5]:
c = np.eye(3)
c
Out[5]:
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
In [6]:
d = np.diag(np.array([1, 2, 3, 4]))
d
Out[6]:
array([[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]])
np.random
: 随机数 (Mersenne Twister PRNG) :
In [7]:
a = np.random.rand(4) # [0, 1] 的均匀分布
a
Out[7]:
array([ 0.05504731, 0.38154156, 0.39639478, 0.22379146])
In [8]:
b = np.random.randn(4) # 高斯
b
Out[8]:
array([ 0.9895903 , 1.85061188, 1.0021666 , -0.63782069])
In [9]:
np.random.seed(1234) # 设置随机种子
In [10]:
np.random.rand?
练习:用函数创建数组
- 实验用
arange
、linspace
、ones
、zeros
、eye
和diag
。 - 用随机数创建不同类型的数组。
- 在创建带有随机数的数组前设定种子。
- 看一下函数
np.empty
。它能做什么?什么时候会比较有用?