1.3.1.2 创建数组

1.3.1.2.1 手动构建数组

  • 1-D:

In [9]:

  1. a = np.array([0, 1, 2, 3])
  2. a

Out[9]:

  1. array([0, 1, 2, 3])

In [10]:

  1. a.ndim

Out[10]:

  1. 1

In [11]:

  1. a.shape

Out[11]:

  1. (4,)

In [12]:

  1. len(a)

Out[12]:

  1. 4
  • 2-D,3-D,…:

In [13]:

  1. b = np.array([[0, 1, 2], [3, 4, 5]]) # 2 x 3 数组
  2. b

Out[13]:

  1. array([[0, 1, 2],
  2. [3, 4, 5]])

In [14]:

  1. b.ndim

Out[14]:

  1. 2

In [15]:

  1. b.shape

Out[15]:

  1. (2, 3)

In [16]:

  1. len(b) # 返回一个纬度的大小

Out[16]:

  1. 2

In [17]:

  1. c = np.array([[[1], [2]], [[3], [4]]])
  2. c

Out[17]:

  1. array([[[1],
  2. [2]],
  3. [[3],
  4. [4]]])

In [18]:

  1. c.shape

Out[18]:

  1. (2, 2, 1)

练习:简单数组

  • 创建一个简单的二维数组。首先,重复上面的例子。然后接着你自己的:在第一行从后向前数奇数,接着第二行数偶数?
  • 在这些数组上使用函数len()、numpy.shape()。他们有什么关系?与数组的ndim属性间呢?

1.3.1.2.2 创建数组的函数

实际上,我们很少一个项目接一个项目输入…

  • 均匀分布:

In [19]:

  1. a = np.arange(10) # 0 .. n-1 (!)
  2. a

Out[19]:

  1. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [20]:

  1. b = np.arange(1, 9, 2) # 开始,结束(不包含),步长
  2. b

Out[20]:

  1. array([1, 3, 5, 7])
  • 或者通过一些数据点:

In [1]:

  1. c = np.linspace(0, 1, 6) # 起点、终点、数据点
  2. c

Out[1]:

  1. array([ 0\. , 0.2, 0.4, 0.6, 0.8, 1\. ])

In [2]:

  1. d = np.linspace(0, 1, 5, endpoint=False)
  2. d

Out[2]:

  1. array([ 0\. , 0.2, 0.4, 0.6, 0.8])
  • 普通数组:

In [3]:

  1. a = np.ones((3, 3)) # 提示: (3, 3) 是元组
  2. a

Out[3]:

  1. array([[ 1., 1., 1.],
  2. [ 1., 1., 1.],
  3. [ 1., 1., 1.]])

In [4]:

  1. b = np.zeros((2, 2))
  2. b

Out[4]:

  1. array([[ 0., 0.],
  2. [ 0., 0.]])

In [5]:

  1. c = np.eye(3)
  2. c

Out[5]:

  1. array([[ 1., 0., 0.],
  2. [ 0., 1., 0.],
  3. [ 0., 0., 1.]])

In [6]:

  1. d = np.diag(np.array([1, 2, 3, 4]))
  2. d

Out[6]:

  1. array([[1, 0, 0, 0],
  2. [0, 2, 0, 0],
  3. [0, 0, 3, 0],
  4. [0, 0, 0, 4]])
  • np.random: 随机数 (Mersenne Twister PRNG) :

In [7]:

  1. a = np.random.rand(4) # [0, 1] 的均匀分布
  2. a

Out[7]:

  1. array([ 0.05504731, 0.38154156, 0.39639478, 0.22379146])

In [8]:

  1. b = np.random.randn(4) # 高斯
  2. b

Out[8]:

  1. array([ 0.9895903 , 1.85061188, 1.0021666 , -0.63782069])

In [9]:

  1. np.random.seed(1234) # 设置随机种子

In [10]:

  1. np.random.rand?

练习:用函数创建数组

  • 实验用arangelinspaceoneszeroseyediag
  • 用随机数创建不同类型的数组。
  • 在创建带有随机数的数组前设定种子。
  • 看一下函数np.empty。它能做什么?什么时候会比较有用?