numpy基础属性方法随机整理(三)--- 维度改变reshape / ravel / flatten / resize / shape /transpose

维度改变分类:
- 1)视图变维:数据共享,同时改变
- ……a.reshape(n,m…), a.ravel()
- 2)复制变维:复制数据且数据相互独立,改变相互不影响
- ……a.flatten()
- 3)就地变维
- ……a.resize((3,2)) / a.shape = (3,2)
- 4)视图转置:数据共享,同时改变
- ……a.transpose() (前提a.shape[0]>1)
- ……a.reshape(-1,1)


1)视图变维(数据共享): a.reshape(n,m…), a.reval() (reval扁平化)**

  • b=a.reshape(2,3),a与b共享同一份数据,b数据变化就相当于a数据发生改变
  • b=a.reval(),a与b共享同一份数据,b数据变化就相当于a数据发生改变
input:
    a = np.arange(1,7)
    print('a:',a)
    b = a.reshape(2,3)
    print('b:', b)
    b[0][0] += 10    # 改变b的第一个数据,观察a数据是否跟着改变
    print('a-1:',a)
    print('b-1:',b)
output:
    a: [1 2 3 4 5 6]
    b: [[1 2 3]
     [4 5 6]]
    a-1: [11  2  3  4  5  6]  # a数据发生改变
    b-1: [[11  2  3]      # b数据发生改变
     [ 4  5  6]]

2)复制变维*(数据副本 相互独立):b.flatten() (扁平化)*
c=b.flatten(),c复制b的数据,且c与b的数据相互独立,c数据改变时不会改变b数据

input:
    c = b.flatten()
    print('b',b)
    print('c',c)
    c[0] += 20      # 改变c的数据,观察b与c数据是否依然相同
    print('b-2',b)
    print('c-2',c)
output:
    b [[11  2  3]
     [ 4  5  6]]
    c [11  2  3  4  5  6]     # c的数据与b相同,但实际上是2份独立的数据
    b-2 [[11  2  3]      # b的第一个数据没有发生改变,仍为11
     [ 4  5  6]]
    c-2 [31  2  3  4  5  6]      # c的第一个数据发生了改变,由11变为31

3)就地变维a.shape(n,m…), a.resize()
a.shape = (3,2) 等价于 a.resize((3,2))
note: resize()参数为元组tuple

4)视图转置(数据共享)a.transpose() – (维度>1才能转置)
f = a.transpose() , f与a**共享同一份数据**

  • 一维数组转置方法:
    g = c.reshape(-1,1): (-1,1)表示可以有任意行,但只能有1列;
    g = c.reshape(1,-1): (1,-1)表示可以有任意列,但只能有1行,即扁平化
input:
    g = c.reshape(-1,1)   # 
    print(c)
    print(g)
output:    
    c: [31  2  3  4  5  6]
    g: [[31]
     [ 2]
     [ 3]
     [ 4]
     [ 5]
     [ 6]]

input:
    p = a.reshape(-1,1)
    print('a:',a)
    print('p:',p)
output:
    a: [[11  2  3]       # a是二维数组
     [ 4  5  6]]
    p: [[11]             # 二维数组通过.reshape(-1,1)后变为只有1列
     [ 2]
     [ 3]
     [ 4]
     [ 5]
     [ 6]]

注:
ravel: 多维数组扁平化操作
ravel(a, order=’C’):Return a contiguous flattened array.

x = np.array([[1, 2, 3], [4, 5, 6]])
print(np.ravel(x))
output:[1 2 3 4 5 6]

猜你喜欢

转载自blog.csdn.net/weixin_40040404/article/details/80779785
今日推荐