# 3.1.1 NumPy数组创建

NumPy数组是科学计算中存放同类型数据的核心对象。使用前按惯例执行`import numpy as np`。数组按轴组织：一维数组只有轴0，沿长度方向操作；二维数组有轴0和轴1，轴0沿行、轴1沿列。掌握数组创建，才能继续学习属性、索引切片与运算。

第一种方法是`np.array()`：把现有列表或元组转为NumPy数组。当参数是一维列表或元组时，创建一维数组；当参数是二维列表或元组时，创建二维数组。可通过数组对象的`ndim`属性查看维度。例如`a = np.array([1, 2, 3, 4])`得到一维数组，`a.ndim`为1；`b = np.array([[1, 2, 3], [4, 5, 6]])`得到二维数组，`b.ndim`为2。

第二种方法是`np.arange()`：用法与Python内置函数`range()`相同，需要`start`、`stop`、`step`三个参数，不同之处在于生成的是numpy数组。结合数组对象的`reshape()`方法，可以灵活创建各种维度和形状的数组。例如`np.arange(0, 10, 2)`得到`array([0, 2, 4, 6, 8])`；`np.arange(12).reshape((2,6))`得到2行6列数组。`reshape`中某维写成`-1`时由系统自动推断该维大小，如`np.arange(12).reshape(2,-1)`同样得到形状`(2, 6)`的数组。

第三种方法是生成随机数组。`np.random.randint(x, y, size)`生成`[x, y)`范围内、形状为`size`的随机整数数组；未指定`size`参数时，生成一个随机整数。`np.random.rand(shape)`生成`[0, 1)`范围内均匀分布的随机数数组，形状通过参数数量指定：未指定参数时生成一个随机小数，指定一个参数生成一维数组，指定两个参数生成二维数组。示例如下。

```python
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([[1, 2, 3], [4, 5, 6]])
print(a.ndim)
print(b.ndim)
c = np.arange(0, 10, 2)
d = np.arange(12).reshape((2, 6))
e = np.arange(12).reshape(2, -1)
print(c)
print(d.shape)
print(e.shape)
```

使用时注意：`arange`的`stop`不包含在结果中；`randint`的区间是左闭右开；`rand`用位置参数指定形状，`randint`用`size`指定形状，二者写法不同；`reshape`前后元素总数必须相等，写成`-1`的维度最多只能有一个。随机函数每次运行的具体数值可能不同。

## 关键要点
- 导入惯例为`import numpy as np`；一维数组只有轴0，二维数组轴0沿行、轴1沿列。
- `np.array()`由列表或元组创建数组，一维参数得到一维数组、二维参数得到二维数组，可用`ndim`查看维度。
- `np.arange(start, stop, step)`用法同`range()`但生成numpy数组，常与`reshape()`组合变形，某维可取`-1`由系统推断。
- `np.random.randint(x, y, size)`生成`[x, y)`随机整数；`np.random.rand(...)`生成`[0, 1)`均匀随机数，形状由参数个数决定。
- `arange`不含右端点；`rand`与`randint`的形状参数写法不同；`reshape`要求元素总数匹配，且`-1`至多出现一次。
