利用Python中的numpy.ndarray.reshape()对阵列形状进行调整

我们在进行阵列运算的时候,常常要根据需要调整阵列的形状,numpy库中的函数reshape()可以方便地实现对阵列形状进行调整。
其函数原型如下:

dst = numpy.ndarray.reshape(a, newshape[, order='C'])

参数含义如下:
a:需要调整形状的阵列
newshape:调整后阵列的形状
order:读取a阵列元素的索引顺序,将元素放入重构数组中的索引顺序。可取值有‘C’, ‘F’, ‘A’。‘C’ 表示使用类似 C 语言的索引顺序读取/写入元素,最后一个索引变化最快,回到第一个索引变化最慢。‘F’ 表示使用类似 Fortran 的索引顺序读取/写入元素,第一个索引变化最快,最后一个索引变化最慢。请注意,“C”和“F”选项不考虑底层数组的内存布局,仅参考索引顺序。‘A’ 表示如果a在内存中是 Fortran连续的,则以类似 Fortran 的索引顺序读取/写入元素,否则表示类似 C语言 的顺序。这个参数大家一般也不需要理解这么多,只需用默认的参数‘C’就好。

一个简单的示例代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
# 图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601
# OpenCV的版本为4.1

import cv2 as cv
import numpy as np

# 新建阵列array
array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# 将array调整为3*4的单通道图像
img1 = array.reshape((3, 4))
img2 = array.reshape((3, 2, 2))
img3 = img2.reshape((1, -1))
bp = 1

在bp=1处设断点,查看img1、img2、img3的属性。如下面的截图所示:
利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
这里要特别注意img2的元素是按什么顺序排的!通过上面最后两张截图不难看出是按下面的规则排的~
首先阵列在行维度上有三行,然后在列维度上有两行,这样就形成了3*2=6个点,每个点中有两个数据,这样就刚好有12个数据坑需要填,然后把阵列array中的数据依次填入这12个数据坑就行了!
示意图如下:
利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
注意语句:img3 = img2.reshape((1, -1))中参数“-1”的意思。当我们不知道阵列中有多少元素时,我们可以将其中一个维度设为-1,此时函数可以根据其它维度的值和阵列元素的总个数自动计数出它的值。

使用函数reshape()时还需要注意,调整后的尺寸应和阵列的元素个数兼容,比如12个元素的阵列,我们可以分成(4,3)或(2,6),但不能分成(3,5)。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年3月17日 下午4:28
下一篇 2022年3月17日 下午4:43

相关推荐