`np.ndarray` 是 NumPy 库中的核心数据结构,用于表示多维数组。它是一个高效的数值计算工具,支持多种操作和属性。以下是对 `np.ndarray` 的详细介绍,包括其创建、属性和常见用法。
---
### 创建 `np.ndarray`
可以通过多种方式创建 `np.ndarray`,例如从 Python 列表、元组或其他数组生成。
#### 示例代码
```python
import numpy as np
# 从列表创建 ndarray
arr_from_list = np.array([1, 2, 3, 4])
print("From List:\n", arr_from_list)
# 从嵌套列表创建二维 ndarray
arr_from_nested_list = np.array([[1, 2], [3, 4]])
print("From Nested List:\n", arr_from_nested_list)
# 使用 arange 创建一维数组
arr_arange = np.arange(0, 10, 2) # 起始值为 0,结束值为 10(不包含),步长为 2
print("Using arange:\n", arr_arange)
# 使用 zeros 创建全零数组
arr_zeros = np.zeros((3, 3)) # 3x3 全零矩阵
print("Using zeros:\n", arr_zeros)
# 使用 ones 创建全一数组
arr_ones = np.ones((2, 4)) # 2x4 全一矩阵
print("Using ones:\n", arr_ones)
```
---
### `np.ndarray` 的属性
`np.ndarray` 提供了许多有用的属性来描述数组的形状、数据类型等信息。
#### 常用属性
1. **`ndarray.shape`**: 数组的维度。
2. **`ndarray.dtype`**: 数组中元素的数据类型。
3. **`ndarray.size`**: 数组中元素的总数。
4. **`ndarray.ndim`**: 数组的维度数。
#### 示例代码
```python
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 获取 shape
print("Shape:", arr.shape) # 输出 (2, 3)
# 获取 dtype
print("Dtype:", arr.dtype) # 输出 int64(具体取决于系统)
# 获取 size
print("Size:", arr.size) # 输出 6
# 获取 ndim
print("Ndim:", arr.ndim) # 输出 2
```
---
### 常用操作
`np.ndarray` 支持丰富的操作,包括索引、切片、重塑、转置等。
#### 索引和切片
```python
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 索引
print("Element at (0, 1):", arr[0, 1]) # 输出 2
# 切片
print("Slice first row:", arr[0, :]) # 输出 [1 2 3]
print("Slice second column:", arr[:, 1]) # 输出 [2 5]
```
#### 重塑和转置
```python
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 重塑
reshaped_arr = arr.reshape(3, 2)
print("Reshaped Array:\n", reshaped_arr)
# 转置
transposed_arr = arr.T
print("Transposed Array:\n", transposed_arr)
```
---
### 解释
1. **创建方式**:
- 可以通过 `np.array` 从 Python 列表或嵌套列表创建。
- 使用函数如 `np.zeros`、`np.ones` 和 `np.arange` 快速生成特定模式的数组。
2. **属性**:
- `shape` 描述了数组的维度大小。
- `dtype` 决定了数组中元素的数据类型。
- `size` 表示数组中元素的总个数。
- `ndim` 表示数组的维度数。
3. **操作**:
- 索引和切片允许访问数组中的特定元素或子数组。
- 重塑可以改变数组的形状而不改变其数据。
- 转置会交换数组的行和列。
---