numpy.reshape

本文详细介绍了NumPy库中reshape函数的使用方法,并通过具体实例展示了如何改变数组形状而不改变其数据内容,同时对比了transpose与reshape的区别。

numpy.reshape(a, newshape, order=’C’)
官方解释:Gives a new shape to an array without changing its data.

看几个例子

l=range(120)
import numpy as np
arr=np.array(l)
arr=arr.reshape(2,4,5,3)

arr为:

[[[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[ 12, 13, 14]],

    [[ 15,  16,  17],
     [ 18,  19,  20],
     [ 21,  22,  23],
     [ 24,  25,  26],
     [ 27,  28,  29]],

    [[ 30,  31,  32],
     [ 33,  34,  35],
     [ 36,  37,  38],
     [ 39,  40,  41],
     [ 42,  43,  44]],

    [[ 45,  46,  47],
     [ 48,  49,  50],
     [ 51,  52,  53],
     [ 54,  55,  56],
     [ 57,  58,  59]]],


   [[[ 60,  61,  62],
     [ 63,  64,  65],
     [ 66,  67,  68],
     [ 69,  70,  71],
     [ 72,  73,  74]],

    [[ 75,  76,  77],
     [ 78,  79,  80],
     [ 81,  82,  83],
     [ 84,  85,  86],
     [ 87,  88,  89]],

    [[ 90,  91,  92],
     [ 93,  94,  95],
     [ 96,  97,  98],
     [ 99, 100, 101],
     [102, 103, 104]],

    [[105, 106, 107],
     [108, 109, 110],
     [111, 112, 113],
     [114, 115, 116],
     [117, 118, 119]]]]
arr_r = arr.reshape(2,4,3,5)

arr_r为:

[[[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[ 10, 11, 12, 13, 14]],

    [[ 15,  16,  17,  18,  19],
     [ 20,  21,  22,  23,  24],
     [ 25,  26,  27,  28,  29]],

    [[ 30,  31,  32,  33,  34],
     [ 35,  36,  37,  38,  39],
     [ 40,  41,  42,  43,  44]],

    [[ 45,  46,  47,  48,  49],
     [ 50,  51,  52,  53,  54],
     [ 55,  56,  57,  58,  59]]],


   [[[ 60,  61,  62,  63,  64],
     [ 65,  66,  67,  68,  69],
     [ 70,  71,  72,  73,  74]],

    [[ 75,  76,  77,  78,  79],
     [ 80,  81,  82,  83,  84],
     [ 85,  86,  87,  88,  89]],

    [[ 90,  91,  92,  93,  94],
     [ 95,  96,  97,  98,  99],
     [100, 101, 102, 103, 104]],

    [[105, 106, 107, 108, 109],
     [110, 111, 112, 113, 114],
     [115, 116, 117, 118, 119]]]]

可见在跑一趟好哦你中,具有和C++一样的RowMajor性质。

注意arr.transpose()与arr.reshape()的不同:transpose只是转动一下坐标轴,每个轴多长并不变,只是换了个方向;而reshape()会将元素以RowMajor准则对元素进行重新排列。

### Numpy reshape 的使用方法 `numpy.reshape()` 是 NumPy 中用于改变数组形状的重要函数。它允许用户在不更改数据的情况下重新排列数组的维度。 #### 基本语法 ```python numpy.reshape(array, newshape, order='C') ``` - `array`: 需要重塑的原始数组。 - `newshape`: 新的形状,可以是一个整数或者元组形式表示新尺寸。如果提供 `-1` 作为其中一个维度,则会根据其他维度自动推断该维度大小[^2]。 - `order`: 可选参数,默认为 `'C'` 表示按行优先顺序读取数据;也可以设置为 `'F'` 或者 `'A'` 来指定不同的存储方式[^3]。 #### 示例代码展示 以下是几个具体的例子来演示如何使用 `numpy.reshape()` 函数: ```python import numpy as np # 创建一个一维数组 a = np.array([1, 2, 3, 4, 5, 6]) # 将其转换成两行三列的形式 b = a.reshape((2, 3)) print(b) # 如果知道其中的一个维度而不知道另一个维度时可以用 -1 自动计算剩余维度 c = a.reshape((3, -1)) print(c) # 改变读取顺序的例子(order 参数的作用) d = np.reshape(a, 6, order='F') print(d) ``` 以上程序运行结果如下所示: ``` [[1 2 3] [4 5 6]] [[1 2] [3 4] [5 6]] [1 4 2 5 3 6] ``` 当尝试将无法匹配的数据量分配到目标结构中时会发生错误。例如下面这段代码试图把长度为16的一维向量重构成具有10个子项的新矩阵就会报错因为两者之间存在矛盾关系[^5]。 ```python e = arr.reshape(10,-1) # 抛出异常ValueError: cannot reshape array... ``` #### 特殊情况处理——未知维度(-1) 有时我们可能只知道部分最终形态的具体数值却不清楚其余应该设为何值,在这种情况下就可以利用特殊占位符 "-1" 让系统自行决定合适的结果[^2]^。 比如对于一个含有十二个元素的一维列表来说如果我们希望得到四乘某数这样的矩形布局那么只需要简单写明即可无需手动算出确切答案: ```python f = np.arange(12).reshape(4,-1) print(f) ``` 这将会输出: ``` [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] ``` #### 总结注意事项 需要注意的是调用此功能前后总元素数目必须保持一致否则便会引发相应的异常提示信息告知使用者操作失败原因所在之处.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值