深入理解NumPy简明教程---数组1
NumPy是Python中一个非常强大的数学库,它提供了高性能的数值计算和数据分析工具。在NumPy中,最重要的对象就是数组(Array),也称为ndarray(N-dimensional Array)。数组是一种多维度的数据结构,它可以容纳多个元素,并且可以对这些元素进行各种数学计算。
在这篇文章中,我们将从多个角度深入理解NumPy中的数组。

1. 数组的创建
NumPy数组可以通过多种方式进行创建。我们可以使用NumPy中的函数来创建数组,也可以从Python中的列表或元组中创建数组。以下是一些创建数组的示例代码:
```python
import numpy as np
# 从Python列表中创建数组
a = np.array([1, 2, 3])
print(a) # [1 2 3]
# 创建一个全为0的数组
b = np.zeros((2, 3))
print(b)
# [[0. 0. 0.]
# [0. 0. 0.]]
# 创建一个全为1的数组
c = np.ones((3, 2))
print(c)
# [[1. 1.]
# [1. 1.]
# [1. 1.]]
# 创建一个随机数组
d = np.random.random((2, 2))
print(d)
# [[0.12345678 0.98765432]
# [0.54321098 0.87654321]]
```
2. 数组的形状和维度
NumPy数组的形状和维度是非常重要的概念。形状指的是数组的维度和各维度的长度,而维度指的是数组的轴数。在NumPy中,我们可以使用数组的shape属性来获取数组的形状,使用数组的ndim属性来获取数组的维度数。
以下是一些示例代码:
```python
import numpy as np
# 创建一个二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape) # (2, 3)
print(a.ndim) # 2
# 创建一个三维数组
b = np.zeros((2, 3, 4))
print(b.shape) # (2, 3, 4)
print(b.ndim) # 3
```
3. 数组的索引和切片
NumPy数组的索引和切片与Python中的列表和元组非常相似。我们可以使用数组的下标来获取数组中的元素,也可以使用切片来获取数组中的子数组。下标从0开始,最后一个元素的下标为数组长度减1。
以下是一些示例代码:
```python
import numpy as np
# 创建一个二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
# 获取数组中的元素
print(a[0, 0]) # 1
print(a[1, 2]) # 6
# 获取数组中的子数组
print(a[:, 1:]) # [[2 3]
# [5 6]]
```
4. 数组的运算
NumPy数组支持多种数学运算,包括加法、减法、乘法、除法等。在进行运算时,NumPy会按照相应的规则对数组进行广播。广播是NumPy中的一个非常强大和重要的机制,它可以让我们在不同形状的数组之间进行运算。
以下是一些示例代码:
```python
import numpy as np
# 创建两个数组
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 数组加法
print(a + b)
# [[ 6 8]
# [10 12]]
# 数组乘法
print(a * b)
# [[ 5 12]
# [21 32]]
```
5. 数组的变形和转置
NumPy数组支持多种变形和转置操作。我们可以使用数组的reshape方法来改变数组的形状,也可以使用数组的transpose方法来进行转置操作。
以下是一些示例代码:
```python
import numpy as np
# 创建一个二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
# 改变数组的形状
b = a.reshape((3, 2))
print(b)
# [[1 2]
# [3 4]
# [5 6]]
# 转置数组
c = a.transpose()
print(c)
# [[1 4]
# [2 5]
# [3 6]]
```