python numpy--改变数组的维度

本文详细介绍了Numpy中数组维度变换的各种方法,包括reshape、ravel、flatten、transpose等函数的应用,以及如何通过元组和resize函数直接修改数组维度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自 《Python数据分析基础教程:Numpy 学习指南(第2版)》

Numpy改变数组维度的方法有:

reshape()
ravel()
flatten()
用元组设置维度
transpose()
resize()

下面将依次进行说明

  1. 首先,创建一个多维数组
from numpy import * 
a = arange(24)

得到:

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

1.reshape 函数

b = a.reshape(2,3,4)
print(b)

得到一个 234 维的数组:

[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]
 
 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

可以想象成2层小洋楼,每层有 3*4 个房间

2.ravel函数 可以将多维数组展平(也就是变回一维)

c = b.ravel()
c

得到一维数组

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

3.flatten函数 也是将多维数组展平,与ravel函数的功能相同,不过flatten函数会请求分配内存来保存结果,而ravel函数只是返回数组的一个视图(view)

c = b.flatten()
print(c)

得到一维数组

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

4.用元组设置维度

直接用一个正整数元组来设置数组的维度

b.shape = (6,4)
print(b)

这种做法将直接改变所操作的数组,现在数组b变成了一个 6*4 的多维数组

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]

5.transpose函数 将矩阵进行转置

d = b.transpose()
print(d)

得到 4*6 的多维数组

[[ 0  4  8 12 16 20]
 [ 1  5  9 13 17 21]
 [ 2  6 10 14 18 22]
 [ 3  7 11 15 19 23]]

6.resize函数 和reshape函数的功能一样,但resize会直接修改所操作的数组

b.resize((2,12))
print(b)

得到 2*12 的两维数组

[[ 0  1  2  3  4  5  6  7  8  9 10 11]
 [12 13 14 15 16 17 18 19 20 21 22 23]]

并且这一步不可以通过赋值来实现,如下所示:

e = b.resize((2,12))
print(e)

此时结果为:

None

作者:m0_37586991
来源:CSDN
原文:https://blog.csdn.net/m0_37586991/article/details/79758168
版权声明:本文为博主原创文章,转载请附上博文链接!

### 使用 PythonNumPy 对三维数组进行数据预处理 在使用 NumPy 进行三维数组的数据预处理时,可以利用其强大的索引和切片功能来高效地完成各种操作。以下是几个常见的数据预处理方法及其实现: #### 数据初始化与扩展 当需要创建一个固定大小的三维数组并填充初始值时,可使用 `np.zeros` 或 `np.empty` 来预先分配内存[^1]。 ```python import numpy as np # 创建一个形状为 (3, 4, 5) 的零矩阵 array_3d = np.zeros((3, 4, 5)) print(array_3d) # 如果只需要未初始化的空间,则可以用 np.empty 提高效率 uninitialized_array = np.empty((3, 4, 5)) print(uninitialized_array) ``` #### 切片与子集提取 通过切片技术可以从三维数组中选取特定部分。例如,可以通过指定维度编号以及范围 `(m:n)` 实现对某一层或多层的操作[^2]。 ```python # 假设我们有一个已知的三维数组 data = np.random.rand(6, 7, 8) # 获取第一个维度上第0号元素对应的二维平面 first_plane = data[0, :, :] print(first_plane.shape) # 输出应为 (7, 8) # 同样也可以获取第二个维度上的某些列 selected_columns = data[:, :3, :] # 取前三个列 print(selected_columns.shape) # 应该得到 (6, 3, 8) # 而第三个维度的部分深度同样适用此逻辑 partial_depths = data[:, :, ::2] # 每隔两个取一次 print(partial_depths.shape) # 结果将是 (6, 7, 4) ``` #### 数组变换 有时为了适应模型输入或其他计算需求,可能需要调整数组结构或者改变其排列顺序。这可通过 `.transpose()` 方法轻松达成。 ```python original_shape = (2, 3, 4) transposed_data = data.transpose(2, 0, 1) # 改变轴的位置 new_shape = transposed_data.shape # 新形狀應為 (4, 2, 3) print(new_shape) ``` #### 归一化或标准化 对于机器学习任务而言,经常要对原始特征做归一化/标准化处理以便提升训练效果。这里展示一种简单的全局归一化方案。 ```python def normalize(data): min_val = np.min(data) max_val = np.max(data) normalized = (data - min_val) / (max_val - min_val) return normalized normalized_data = normalize(data) print(normalized_data) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值