NumPy(八):形状变换【生成新数组:ar.T、ar.reshape()、np.reshape(ar,(x,y))、np.resize(ar,(x,y,.))】【原地修改:ar.resize()】

.T/.reshape()/.resize()都是生成新的数组!!!

my_arr.resize():将原数组原地修改形状,不生产新数组

一、ndarray.reshape(shape, order):返回新对象

返回一个新对象,该对象是具有相同数据域,但shape不一样的视图

行、列不进行互换,只是按顺序转为一维数组后,再按照新形状重新排序

# 在转换形状的时候,一定要注意数组的元素匹配
stock_change.reshape([5, 4])
stock_change.reshape([-1,10])  # 数组的形状被修改为: (2, 10), -1: 表示通过待计算

二、ndarray.resize(new_shape):不产生新对象

不产生新对象,修改当前对象本身,修改数组本身的形状(需要保持元素个数前后相同)

行、列不进行互换,只是按顺序转为一维数组后,再按照新形状重新排序

stock_change.resize([5, 4])

# 查看修改后结果
stock_change.shape
(5, 4)

三、ndarray.T:返回新对象

数组的转置

将数组的行、列进行互换

产生一个新对象

stock_change.T.shape
(4, 5)

案例

import numpy as np

# 数组形状:.T/.reshape()/.resize()
# 注意了:.T/.reshape()/.resize()都是生成新的数组!!!

# .T方法:转置,例如原shape为(3,4)/(2,3,4),转置结果为(4,3)/(4,3,2) → 所以一维数组转置后结果不变
ar1 = np.arange(10)
ar2 = np.ones((3, 4))
ar3 = np.ones((2, 3, 4))
print('ar1 = ', ar1)
print('ar2 = ', ar2)
print('ar3 = ', ar3)

ar1_T = ar1.T
ar2_T = ar2.T
ar3_T = ar3.T

print('ar1 = ', ar1)
print('ar2 = ', ar2)
print('ar3 = ', ar3)
print('-' * 50)
print('ar1_T = ', ar1_T)
print('ar2_T = ', ar2_T)
print('ar3_T = ', ar3_T)
print('-' * 100)

# numpy.reshape(a, newshape, order='C'):为数组提供新形状,而不更改其数据,所以元素数量需要一致!!
ar4 = ar1.reshape(2, 5)  # 用法1:直接将已有数组改变形状
ar5 = np.zeros((4, 6)).reshape(3, 8)  # 用法2:生成数组后直接改变形状
ar6 = np.reshape(np.arange(12), (3, 4))  # 用法3:参数内添加数组,目标形状
print('ar1 = ', ar1)
print('ar4 = ', ar4)
print('ar5 = ', ar5)
print('ar6 = ', ar6)
print('-' * 50)

# numpy.resize(a, new_shape):返回具有指定形状的新数组,如有必要可重复填充所需数量的元素。
ar7 = np.arange(5)
print('ar7 = ', ar7)
ar8 = np.resize(ar7, (3, 4))
print('ar8 = ', ar8)
ar9 = ar8.resize((4, 3))
print('ar9 = ', ar9)
print('ar8 = ', ar8)

打印结果:

ar1 =  [0 1 2 3 4 5 6 7 8 9]
ar2 =  [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
ar3 =  [[[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]

 [[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]]
ar1 =  [0 1 2 3 4 5 6 7 8 9]
ar2 =  [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
ar3 =  [[[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]

 [[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]]
--------------------------------------------------
ar1_T =  [0 1 2 3 4 5 6 7 8 9]
ar2_T =  [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
ar3_T =  [[[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]]
----------------------------------------------------------------------------------------------------
ar1 =  [0 1 2 3 4 5 6 7 8 9]
ar4 =  [[0 1 2 3 4]
 [5 6 7 8 9]]
ar5 =  [[0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0.]]
ar6 =  [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
--------------------------------------------------
ar7 =  [0 1 2 3 4]
ar8 =  [[0 1 2 3]
 [4 0 1 2]
 [3 4 0 1]]
ar9 =  None
ar8 =  [[0 1 2]
 [3 4 0]
 [1 2 3]
 [4 0 1]]

Process finished with exit code 0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值