.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