numpy中数据重塑与透视的高级操作
发布时间: 2024-05-03 04:46:09 阅读量: 78 订阅数: 40
![numpy中数据重塑与透视的高级操作](https://img-blog.csdnimg.cn/img_convert/8db1e55eedb20fbc2be99b058a9420c7.png)
# 1. NumPy数据操作基础
NumPy是Python中用于科学计算的基本库,它提供了一系列强大的数据操作工具。NumPy的核心数据结构是多维数组,称为ndarray。ndarray可以存储各种数据类型,包括数字、布尔值和字符串。
NumPy提供了丰富的数组操作函数,包括算术运算、统计函数和线性代数操作。这些函数可以高效地对大规模数据进行操作,并支持广播机制,允许对不同形状的数组进行逐元素运算。
# 2. 数据重塑技巧
### 2.1 数组的变形和转置
#### 2.1.1 reshape()函数
`reshape()`函数用于改变数组的形状,而不改变其元素的顺序。其语法为:
```python
numpy.reshape(array, newshape, order='C')
```
其中:
* `array`:要重塑的数组。
* `newshape`:一个元组,指定新数组的形状。
* `order`:指定元素在数组中排列的顺序,可以是'C'(按行)或'F'(按列)。
**示例:**
```python
import numpy as np
# 创建一个二维数组
arr = np.arange(12).reshape(3, 4)
print(arr)
# 重塑为一维数组
arr_flat = arr.reshape(-1)
print(arr_flat)
# 重塑为三维数组
arr_3d = arr.reshape(2, 2, 3)
print(arr_3d)
```
**输出:**
```
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
```
#### 2.1.2 transpose()函数
`transpose()`函数用于转置数组,即交换其行和列。其语法为:
```python
numpy.transpose(array)
```
**示例:**
```python
# 创建一个二维数组
arr = np.arange(12).reshape(3, 4)
print(arr)
# 转置数组
arr_transposed = np.transpose(arr)
print(arr_transposed)
```
**输出:**
```
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
```
### 2.2 数组的拼接和拆分
#### 2.2.1 concatenate()函数
`concatenate()`函数用于将多个数组沿指定轴拼接在一起。其语法为:
```python
numpy.concatenate((array1, array2, ..., arrayn), axis=0)
```
其中:
* `array1, array2, ..., arrayn`:要拼接的数组。
* `axis`:指定拼接的轴,0表示按行拼接,1表示按列拼接。
**示例:**
```python
# 创建两个一维数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 按行拼接
arr_concat_row = np.concatenate((arr1, arr2))
print(arr_concat_row)
# 按列拼接
arr_concat_col = np.concatenate((arr1[:, None], arr2[:, None]), axis=1)
print(arr_concat_col)
```
**输出:**
```
[1 2 3 4 5 6]
[[1 4]
[2 5]
[3 6]]
```
#### 2.2.2 split()函数
`split()`函数用于将一个数组沿指定轴拆分成多个子数组。其语法为:
```python
numpy.split(array, indices_or_sections, axis=0)
```
其中:
* `array`:要拆分的数组。
* `indices_or_sections`:一个整数或一个包含整数的列表,指定拆分的位置。
* `axis`:指定拆分的轴,0表示按行拆分,1表示按列拆分。
**示例:**
```python
# 创建一个一维数组
arr = np.arange(12)
# 按指定位置拆分
arr_split = np.split(arr, [3, 6])
print(arr_split)
# 按等长的部分拆分
arr_split_sections = np.split(arr, 3)
print(arr_split_sections)
```
**输出:**
```
[array([0, 1, 2]), array([3
```
0
0