【晕头晕脑的Python】Python中Reshape函数解析

Reshape()作用:

Reshape(),函数的作用就是将数据的按照既定的维度进行整理。

  • reshape(M,N):可以将数据整理为M X N的大小。
  • reshape(M, N)[:,:,:] :”[ ]“ ,方括号可以对而外的 M x N 维度的数据进行顺序的排布。

Reshape()实例说明:

初期数据及库准备:

import numpy as np  # 调用numpy库
# 设置一个1-18的列表
anchors = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
#将anchors由列表转换为数组的形式
anchors = np.array(anchors)

一维reshape() 为 二维

18个元素一维度数组,可以转换为2 x 93 X 6的二维数组

print(anchors.reshape([3,6]))  # 生成一个(3,6)的二维数组

print(anchors.reshape([2,9]))  # 生成一个(2,9)的二维数组

# print(anchors.reshape([3,3]))   # error,显示维度不匹配,无法生成
  • -anchors.reshape([3,6]):
    3,6的输出结果
  • anchors.reshape([2,9]):
    ]
  • anchors.reshape([3,3]):
    在这里插入图片描述
    现在得到了一个由维转换到二维的矩阵,但是发现想对现在这个矩阵的一些排布进行调整,就用到了reshape( )[ ] 中的**[ ]** 进行排序,

二维数组 reshape 切片,逆置

list的[]中有三个参数,用冒号分割 list[A:B:C]
A:相当于start_index,可以为空,默认是0 ----开始位置
B:相当于end_index,可以为空,默认是list.size()-----结束位置
C:步长,默认为1。步长为-1时,返回倒序原序列------每一步多走多远
ps:另外AB构成的区间是[A,B)的左闭右开区间,即B的值是取不到的,只会取到B-1的数

print(anchors.reshape([3,6])[:-1,:])
"""
-1表示最后一行或者一列,根据python的切片规则,[A:B]的切片包含A而不包含B,即是[A, B)的取值
原始结果为:
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]
 [13 14 15 16 17 18]]
结果为:
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]]
"""
  • 在两个维度上切片
print(anchors.reshape([3,6])[:-1,:-1])
"""
-1表示最后一行或者一列,根据python的切片规则,[A:B]的切片包含A而不包含B,即是[A, B)的取值
原始结果为:
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]
 [13 14 15 16 17 18]]
结果为:
[[ 1  2  3  4  5]
 [ 7  8  9 10 11]]
"""
  • 按行逆置
print(anchors.reshape([3,6])[::-1,::])
"""
------------------------------------------------------------
> list的[]中有三个参数,用冒号分割 list[A:B:C]
> A:相当于start_index,可以为空,默认是0 ----开始位置
> B:相当于end_index,可以为空,默认是list.size()-----结束位置
> C:步长,默认为1。步长为-1时,返回倒序原序列------每一步多走多远
> ps:另外AB构成的区间是[A,B)的左闭右开区间,即B的值是取不到的,只会取到B-1的数

-----------------------------------------------------------
原始结果为:
[[ 1  2  3  4  5  6]
[ 7  8  9 10 11 12]
[13 14 15 16 17 18]]
结果为:
[[13 14 15 16 17 18]
[ 7  8  9 10 11 12]
[ 1  2  3  4  5  6]]
"""
  • 按列逆置
print(anchors.reshape([3,6])[::,::-1])
"""
------------------------------------------------------------
> list的[]中有三个参数,用冒号分割 list[A:B:C]
> A:相当于start_index,可以为空,默认是0 ----开始位置
> B:相当于end_index,可以为空,默认是list.size()-----结束位置
> C:步长,默认为1。步长为-1时,返回倒序原序列------每一步多走多远
> ps:另外AB构成的区间是[A,B)的左闭右开区间,即B的值是取不到的,只会取到B-1的数

-----------------------------------------------------------
原始结果为:
[[ 1  2  3  4  5  6]
[ 7  8  9 10 11 12]
[13 14 15 16 17 18]]
结果为:
[[ 6  5  4  3  2  1]
[12 11 10  9  8  7]
[18 17 16 15 14 13]]
"""

三维Reshape情况

三维情况与二维类似,可以创建验证。下面补充一种在reshape数值中有-1的情况,需要强调的一点就是:若reshape(-1,2),则会生成两列的数据,行数会由系统自动计算。

print(anchors.reshape([-1,2,3]))
"""
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]

 [[13 14 15]
  [16 17 18]]]
"""
print(anchors.reshape([-1,3]))
"""
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]
 [13 14 15]
 [16 17 18]]
"""
### Python NumPy 库中的 `reshape` 函数 #### 语法 `numpy.reshape(a, newshape, order='C')` - **a**: 要被重塑的数组。 - **newshape**: 整数或整数元组,表示新形状。如果提供了一个整数值,则返回一维数组;可以使用 `-1` 来自动推断维度大小。 - **order**: {'C', 'F', 'A'},可选,默认为 `'C'`。指定读取/写入元素的方式。 #### 使用示例 创建一个简单的二维数组并展示其原始形态: ```python import numpy as np # 创建初始矩阵 matrix = np.array([[1, 2, 3], [4, 5, 6]]) print(f"Original matrix:\n{matrix}") ``` 将上述二维数组转换成不同的一维或多维形式: ```python # 将二维数组展平为一维数组 flattened_array = np.reshape(matrix, -1) print(f"\nFlattened array using (-1):\n{flattened_array}") # 改变形状至特定尺寸(例如:3x2) reshaped_3_by_2 = np.reshape(matrix, (3, 2)) print(f"\nReshaped to shape (3, 2):\n{reshaped_3_by_2}") # 自动推算其中一个维度大小 auto_inferred_shape = np.reshape(matrix, (2, -1)) print(f"\nAuto inferred one dimension size with (2, -1):\n{auto_inferred_shape}") ``` 以上代码片段展示了如何利用 `np.reshape()` 方法来改变给定数组的形式而不影响原数据的内容[^1]。 当设置参数 `order` 不同时,会影响元素排列顺序。对于大多数情况,默认值 `"C"` 已经足够满足需求,它按照 C 风格连续存储模式操作数据。而选择 `"F"` 则遵循 Fortran 方式的列优先级访问模式[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值