Numpy中reshape的用法

语法介绍

numpy.reshape(a, newshape, order=‘C’)

在不改变数据的情况下给数组一个新的形状。就是先将数组按给定索引顺序一维展开,然后按与展开时相同的索引顺序将展开的元素填充到新数组中;即等价于 np.reshape(np.revel(array), newshape, order) .

参数解释:

  1. newshape : 整数或整数元组,用于指示新数组的形状,格式(行row,列col,… )。

新的形状应该与原来的形状兼容,即元素个数必须相同。如果是一个整数,那么结果将是一个该长度的一维数组。
形状的其中一个维度可以是 -1,在这种情况下,新形状的该维度值是由数组的长度和其余维度自动推断出来的

  1. order: {‘C’, ‘F’, ‘A’}, 可选参数。

使用a的索引顺序读取其元素,并使用这个索引顺序将元素放入重塑的数组中。

‘C’ , 行优先顺序 (表示使用类似 C 语言的索引顺序来读/写元素,最后一个轴的索引变化最快,回到第一个轴的索引变化最慢)。
‘F’ , 列优先顺序 (表示使用类似 Fortran 语言的索引顺序来读/写元素,第一个索引变化最快,最后一个索引变化最慢)。
‘A’ , 按存储顺序 (表示如果数组 ‘a’ 在内存中是类似 Fortran 语言的数组分布方式,则按照类似 Fortran 语言的索引顺序读/写元素,否则按照类似 C 语言的顺序)。

注意 ‘C’ 和 ‘F’ 选项没有考虑底层数组的内存布局,只是参考了索引的顺序。

示例

示例1

import numpy as np

# 定义数组 b
b = np.arange(5)
print(b)
# ---------- newshape取整数 -----------------
# 返回 1 维数组(以下8种表达方式等价)
print(np.reshape(b,5))
print(np.reshape(b,-1))
print(np.reshape(b,(5,)))
print(np.reshape(b,(-1,)))

print(b.reshape(5))
print(b.reshape(5,))
print(b.reshape(-1))
print(b.reshape(-1,))

[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]

示例2

np.rashape(array,())和array.reshape()函数是等价的,下面介绍以array.reshape()形式

import numpy as np

# 定义数组 b
b = np.arange(5)
print(b)
# ---------- newshape取整数 -----------------

# 下面两个结果相同
print(b.reshape(5,1))
print(b.reshape(-1,1))


# 注意区分第一种和后面两种的不同
print(b.reshape(5,))  
print(b.reshape(1,-1))
print(b.reshape(1,5))

[0 1 2 3 4]
[[0]
 [1]
 [2]
 [3]
 [4]]
[[0]
 [1]
 [2]
 [3]
 [4]]
[0 1 2 3 4]
[[0 1 2 3 4]]
[[0 1 2 3 4]]

示例3

import numpy as np
c = np.arange(6).reshape(2,3)
print(c)
#以下四种结果相同
print(c.reshape(6))
print(c.reshape(6,))
print(c.reshape(-1))
print(c.reshape(-1,))

#以下两种结果相同
print(c.reshape(1,-1))
print(c.reshape(1,6))

#以下两种结果相同
print(c.reshape(-1,1))
print(c.reshape(6,1))

[[0 1 2]
 [3 4 5]]
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[[0 1 2 3 4 5]]
[[0 1 2 3 4 5]]
[[0]
 [1]
 [2]
 [3]
 [4]
 [5]]
[[0]
 [1]
 [2]
 [3]
 [4]
 [5]]

示例4

import numpy as np
c = np.arange(6).reshape(2,3)
print(c)
#以下四种结果相同

print(c.reshape(2,3,1))
print(c.reshape(2,1,3))

print(c.reshape(3,2,1))
print(c.reshape(3,1,2))

print(c.reshape(1,2,3))

# 下面两个结果相同
print(c.reshape(1,3,2))
print(c.reshape(1,3,-1))

[[0 1 2] 
 [3 4 5]]
[[[0]      
  [1]      
  [2]]     

 [[3]      
  [4]      
  [5]]]    
[[[0 1 2]] 

 [[3 4 5]]]
[[[0]      
  [1]]     

 [[2]
  [3]]

 [[4]
  [5]]]
[[[0 1]]

 [[2 3]]

 [[4 5]]]
[[[0 1 2]
  [3 4 5]]]
[[[0 1]
  [2 3]
  [4 5]]]
[[[0 1]
  [2 3]
  [4 5]]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值