numpy修改数组形状

概述

在numpy中,修改数组形状,是指 将 n 行 m 列 的数组改成 i 行 j 列,n * m必须等于i * j,否则报错

ndarray.reshape()方法

ndarray对象的reshape()方法,可以改变当前对象的数组形状

语法

ndarray.reshape(size)
参数说明:
  • size:形状,tuple类型,表示改成m行n列数组

将1维数组改成2维数组

import numpy as np

arr=np.array([1,2,3,4])
arr2=arr.reshape((2,2))
print('arr:',arr)
print('arr2:',arr2)

执行结果:

arr: [1 2 3 4]
arr2: [[1 2]
 [3 4]]
注意:

转变后的 i 行 j 列 数组,i*j必须等于 原数组的 元素总数,否则报错

错误例子

将3行4列数组,改成2行2列

import numpy as np

arr=np.random.randint(1,10,(3,4))
arr2=arr.reshape((2,2))
print('arr:',arr)
print('arr2:',arr2)

执行结果:

ValueError: cannot reshape array of size 12 into shape (2,2)

因为原数组3行4列共12个元素,转换成2行2列共4个元素的数组,元素无法匹配上,所以无法转换

将1维数组改成3维数组

arr=np.arange(24)
arr2=arr.reshape(2,3,4)
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)

执行结果:

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]
arr形状: (24,)
arr2: [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
arr2形状: (2, 3, 4)

原数组是一维数组共24个元素,修改成3维数组,3维数组比较抽象,可以理解成2个3行4列的数组,其元素个数也是24个,与原数组的元素个数匹配,所以能够正常转换

将2维数组转换成1维数组

arr=np.random.randint(1,10,(3,4))
arr2=arr.reshape(12)
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)

执行结果:

arr: [[1 7 1 4]
 [8 1 1 2]
 [5 2 1 9]]
arr形状: (3, 4)
arr2: [1 7 1 4 8 1 1 2 5 2 1 9]
arr2形状: (12,)
注意:

一维数组的形状是 (n,),只有一个数,第二个数也不能是0,否则报错

形状(n,1)表示n行1列

arr=np.random.randint(1,10,(3,4))
arr2=arr.reshape(12,1)
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)

执行结果是:

arr: [[7 9 4 7]
 [8 6 8 4]
 [4 2 4 7]]
arr形状: (3, 4)
arr2: [[7]
 [9]
 [4]
 [7]
 [8]
 [6]
 [8]
 [4]
 [4]
 [2]
 [4]
 [7]]
arr2形状: (12, 1)

ndarray.flatten()方法

将n维数组转换成1维数组的简单方法

arr=np.random.randint(1,10,(3,4))
arr2=arr.flatten()
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)

执行结果:

arr: [[2 7 1 4]
 [1 4 2 3]
 [5 9 2 2]]
arr形状: (3, 4)
arr2: [2 7 1 4 1 4 2 3 5 9 2 2]
arr2形状: (12,)

numpy.reshape()函数

注意:这不是ndarray对象的reshape()方法

这是numpy的函数,改变数组形状

语法

numpy.reshape(a, newshape)
参数说明:
  • a:类似数组的类型,如:list、tuple、ndarray
  • newshape:形状,tuple类型,表示改成m行n列数组
返回值:
  • 修改形状后的ndarray对象
注意:

原数组没有发送变化

例子:

将2行6列的list转换成3行4列的ndarray数组

import numpy as np

l=[[1,2,3,4,5,6],[3,4,5,6,7,8]]
arr=np.reshape(l,(3,4))

print('l',l)
print('arr:',arr)

执行结果:

l [[1, 2, 3, 4, 5, 6], [3, 4, 5, 6, 7, 8]]
arr: [[1 2 3 4 5 6]
 [3 4 5 6 7 8]]

原文出处:/show_1EF3kpes5xFQ.html