精华内容
下载资源
问答
  • 不知道大家有没有一种感觉,每次当使用numpy数组的时候坐标轴总是傻傻分不清楚,然后就会十分的困惑,每次运算都需要去尝试好久才能得出想要的结果。这里我们来简单解释一下numpy中一维,二维,三维数组坐标轴问题...

    不知道大家有没有一种感觉,每次当使用numpy数组的时候坐标轴总是傻傻分不清楚,然后就会十分的困惑,每次运算都需要去尝试好久才能得出想要的结果。这里我们来简单解释一下numpy中一维,二维,三维数组的坐标轴问题。
    首先我们讨论一维的情况,代码如下:

    import numpy as np
    
    
    class Debug:
        def __init__(self):
            self.array1 = np.array([0, 1, 2])
            self.array2 = np.array([[0], [1], [2]])
    
        def mainProgram(self):
            print("The value of array1 is: ")
            print(self.array1)
            print("The shape of array1 is: ")
            print(self.array1.shape)
            print("The value of array2 is: ")
            print(self.array2)
            print("The shape of array2 is: ")
            print(self.array2.shape)
    
    
    if __name__ == '__main__':
        main = Debug()
        main.mainProgram()
    """
    The value of array1 is: 
    [0 1 2]
    The shape of array1 is: 
    (3,)
    The value of array2 is: 
    [[0]
     [1]
     [2]]
    The shape of array2 is: 
    (3, 1)
    """
    

    从上面的结果我们可以看到,一维横数组沿着横向排列,我们可以认定为x轴向,它的数组大小为(3,),一维列数组沿着纵向排列,我们可以认为是y轴方向,它的大小为(3, 1),我们可以从左向右,看出第二个参数代表的是横向上的参数个数,第一个参数代表的是纵向上的参数个数,因此我们可以将横向数组的大小(3,)理解为(,3)更为合适。

    接下来我们研究一下二维数组,哪个参数对应的是横坐标,哪个参数对应的是纵坐标。
    代码如下:

    import numpy as np
    
    
    class Debug:
        def __init__(self):
            self.array1 = np.ones((2, 3))
            self.array2 = np.ones((3, 2))
    
        def mainProgram(self):
            print("The value of array1 is: ")
            print(self.array1)
             print("The shape of array1 is: ")
            print(self.array1.shape)
            print("The value of array2 is: ")
            print(self.array2)
            print("The shape of array2 is: ")
            print(self.array2.shape)
    
    
    if __name__ == '__main__':
        main = Debug()
        main.mainProgram()
    
    """
    The value of array1 is: 
    [[1. 1. 1.]
     [1. 1. 1.]]
    The shape of array1 is: 
    (2, 3)
    The value of array2 is: 
    [[1. 1.]
     [1. 1.]
     [1. 1.]]
    The shape of array2 is: 
    (3, 2)
    """
    

    从上面的结果我们可以看出,从左向右,第一个参数代表的是(row), 第二个参数代表的是列(column)。我们知道numpy中默认的是笛卡尔坐标系,所以横向为x,纵向为y,具体的请看坐标系(超链接点击跳转查看)。所以对self.array1来说,定义时输入的数组大小的(2, 3)代表沿着x轴拥有3个值,沿着y轴拥有2个值。对比上述得到的结果与我们在一维情况中推断得到的结果,证明我们的理解是正确的。

    接着我们讨论三维的情况:代码如下:

    import numpy as np
    
    
    class Debug:
        def __init__(self):
            self.array1 = np.ones((2, 3, 4))
    
        def mainProgram(self):
            print("The value of array1 is: ")
            print(self.array1)
            print("The shape of array1 is: ")
            print(self.array1.shape)
    
    
    if __name__ == '__main__':
        main = Debug()
        main.mainProgram()
    
    
    """
    The value of array1 is: 
    [[[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]
    
     [[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]]
    The shape of array1 is: 
    (2, 3, 4)
    """
    

    不难发现,沿着x轴方向拥有4个值,沿着y轴方向拥有3个值,沿着z轴方向拥有2个值。

    综上所述,在numpy数组中,定义三维数组时,从左向右, 第一个参数为z轴,第二个参数为y轴,第三个参数为x轴。 对于各个坐标轴在空间中的朝向问题,建议阅读numpy数组坐标轴。之后我们会进一步探讨numpy模块中的其他与坐标轴相关的函数。

    如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

    展开全文
  • 正向表达 : 作用 构建图像 例如 a[x][y]= 即在此点有元素 反向表达 例如 a[n][2] = 即第n个元素的坐标

    正向表达 : 作用 构建图像

    例如 a[x][y]=

    即在此点有元素

    反向表达

    例如 a[n][2] = 

    即第n个元素的坐标为

    展开全文
  • 数组坐标匹配a-z

    2019-02-20 11:07:38
    String.fromCharCode(98 + index), 从98开始 对应 a 99 => b 100 => c

    String.fromCharCode(98 + index),

    从98开始  对应 a

    99 => b

    100 => c

    展开全文
  • 图像数组表示

    2021-10-17 09:12:01
    图像数组表示 Numpy:Python科学计算工具包,其中包含了大量有用的思想,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。数组对象可以帮助实现数组中的重要操作,比如矩阵乘积、转置、解方程系统、...

    图像数组表示

    Numpy:Python科学计算工具包,其中包含了大量有用的思想,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。数组对象可以帮助实现数组中的重要操作,比如矩阵乘积、转置、解方程系统、向量乘积和归一化,这为图像变形、对变换进行建模、图像分类、图像聚类等提供了基础。



    图像数组表示

    载入图象时,调用array()方法将图像转换成Numpy的数组对象,数组对象是多维的,可以用来表示向量、矩阵和图像。数组中的所有元素必须具有相同的数据类型,除非创建数据对象时指定数据类型,否则数据类型会按照数据的类型自动确定。

    im = array(Image.open('empire.jpg'))
    print im.shape, im.dtype
    
    im = array(Image.open('empire.jpg').convert('L'), 'f')
    print im.shape, im.dtype
    

    以下为控制台输出结果:

    (800, 569, 3) uint8 
    # 第一个元组表示图像数组的大小(行、列、颜色通道)uint8:数组元素的数据类型,图像通常被编码成无符号八位整数(uint8)
    (800, 569) float32
    

    说明:第一种情况,载入图像并将其转换到数组中,数组的数据类型为“uint8”,第二种情况,对图像进行灰度化处理,并在创建数组时使用额外的参数“f”,将数据类型转换为浮点型。
    灰度图像没有颜色信息,在形状数组中,只有两个数值。

    访问数组中的元素

    value = im[i, j, k] # 访问 位于坐标i, j, 以及颜色通道K的像素值
    # 数组切片方式访问多个数组元素
    # 切片方式返回的是以指定间隔下标访问该数组的元素值
    im[i, :] = im[j, :] # 将第j行的所有数值赋值给第i行
    im[:, i] = 100 # 将第i列的所有数值设为100
    im[:100, :50].sum() # 计算前100行、前50列所有数值的和
    im[i].mean() # 第i行所有数值的平均值
    im[:, -1] # 最后一列
    im[-2, :] # 倒数第二行
    
    # 如果仅使用一个下标, 则该下标为行下标
    

    灰度变换

    图像读入Numpy数组对象后,可以对其执行任意数学操作。
    例如灰度变换

    from PIL import Image
    from numpy import *
    im = array(Image.open('empire.jpg').convert('L'))
    im2 = 255 - im # 对图像进行反相处理
    im3 = (100.0/255)*im + 100 # 对图像像素值变换到100...200区间
    im4 = 255.0 * (im/255.0)**2 # 对图像像素值求平方后得到的图像
    # 即对图像进行二次函数变换, 使较暗的像素值变得更小
    

    array()变换的相反操作可以使用PIL的fromarray()函数完成

    pil_im = Image.fromarray(im)
    

    在创建PIL图像之前需要将数据类型从其他数据类型转换为(uint8)转换回来。

    图像缩放

    对图像进行缩放处理没有现成简单的方法,Numpy的数组对象是我们处理图像和数据的主要工具。
    可以使用PIL对图像对象转换的操作,写一个用于图像缩放的函数

    def imresize(im, sz):
        """使用PIL对象重新定义图像数组的大小"""
        pil_im = Image.fromarray(uint8(im))
    
        return array(pil_im.resize(sz))
    

    直方图均衡化

    直方图均衡化:将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。
    在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。
    在 该情况下,直方图均衡化的变换图像是图像中像素值的累积分布函数(cdf)即 将像素值的范围映射到目标范围的归一化操作。

    def histeq(im, nbr_bins = 256):
        """对一幅灰度图像进行直方图均衡化"""
    
        # 计算图像的直方图
        imhist, bins = histogram(im.flatten(), nbr_bins, normed = True)
        cdf = imhist.cumsum() # 累积分布函数
        cdf = 255*cdf / cdf[-1] # 归一化到 0...1 范围
        # 使用累积分布函数的线性插值, 计算新的像素值
        im2 = interp(im.flatten(), bins[: -1], cdf)
        return im2.reshape(im.shape),cdf
    

    np.zeros()函数

    返回来一个给定形状和类型的用0填充的数组;
    zeros(shape, dtype=float, order=‘C’)
    shape:形状
    dtype:数据类型,可选参数,默认numpy.float64
    order:可选参数,c代表与c语言类似,行优先;F代表列优先

    import numpy as np
    
    print(np.zeros((2,5)))
    

    输出:
    2行5列的矩阵
    在这里插入图片描述

    print(np.zeros((2,5),dtype= np.int))
    

    输出
    在这里插入图片描述

    image.shape

    图像的数据结构
    当用img = cv2.imread(‘pic.png’)的时候:
    用img.shape返回的是: (height, width, channel)
    height: 图片的垂直尺寸
    width: 图片的水平尺寸
    channel: 图片的通道数
    在这里插入图片描述

    cv2.imread()

    Mat cv::imread(const string& filename,int flags=IMREAD_COLOR);
    

    IMREAD_UNCHANGED = -1, //返回包含alpha通道的加载图像
    IMREAD_GRAYSCALE = 0, //返回一个灰度图像
    IMREAD_COLOR = 1, //返回一个BGR通道的图像
    IMREAD_ANYDEPTH = 2, //当输入具有相应的深度时返回16位/ 32位图像,否则将其转换为8位。.
    IMREAD_ANYCOLOR = 4, //则以任何可能的颜色格式读取图像。
    IMREAD_LOAD_GDAL = 8, //使用GDAL的驱动加载图像。
    IMREAD_REDUCED_GRAYSCALE_2 = 16, //将图像转换为单通道灰度图像,图像大小减少1/2。
    IMREAD_REDUCED_COLOR_2 = 17, //转换图像的3通道BGR彩色图像和图像的大小减少1/2。
    IMREAD_REDUCED_GRAYSCALE_4 = 32, //将图像转换为单通道灰度图像,图像大小减少1/4。
    IMREAD_REDUCED_COLOR_4 = 33, //转换图像的3通道BGR彩色图像和图像的大小减少1/4。
    IMREAD_REDUCED_GRAYSCALE_8 = 64, //将图像转换为单通道灰度图像,图像大小减少1/8。
    IMREAD_REDUCED_COLOR_8 = 65, //转换图像的3通道BGR色彩图像和图像大小减少1/8。
    IMREAD_IGNORE_ORIENTATION = 128 //不旋转图像根据EXIF的定位标志。

    cv2.copyMakeBorder()函数

    copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])
    

    src : 输入的图片 top, bottom, left, right :相应方向上的边框宽度
    borderType:定义要添加边框的类型,它可以是以下的一种:
    cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要额外再给定一个参数)
    cv2.BORDER_REFLECT:添加的边框像素将是边界元素的镜面反射,类似于gfedcb|abcdefgh|gfedcba
    cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT:和上面类似,但是有一些细微的不同,类似于gfedcb|abcdefgh|gfedcba
    cv2.BORDER_REPLICATE:使用最边界的像素值代替,类似于aaaaaa|abcdefgh|hhhhhhh
    cv2.BORDER_WRAP:不知道怎么解释,直接看吧, cdefgh|abcdefgh|abcdefg
    value:如果borderType为cv2.BORDER_CONSTANT时需要填充的常数值。

    展开全文
  • 二叉树的数组表示

    千次阅读 2019-05-08 16:21:00
    二叉树的数组表示 二叉树的数组表示: 一、数据结构的本质 二叉树在很多应用的地方,其实很多时候并不需要去建树。大多数学生陷入一个误区,二叉树一定要形如下面的样子。 package tree; ...
  • 注解 1、模拟题。 2、难点在于四个方向的...用数组表示,代码简洁清晰。先找出来下一步的方向,然后在对应的X和Y矩阵上进行坐标的变化。对应代码: int new_dir; if(c=='A'){ new_dir = dir_A[cur_dir]; } ...
  • 二叉树数组表示

    千次阅读 2019-06-13 07:59:21
    用数组表示二叉树 #include " iostream " using namespace ...
  • 图像的数组表示 图像一般采用RGB色彩模式,图像中的每一个像素点,由红色,绿色和蓝色组成,这三种颜色形成三个颜色通道,每个通道之间进行变化和叠加之后形成各种颜色,其中R,G,B三个颜色通道取值范围均为0-255 ...
  • 数据结构5....下面关于图的存储的叙述中正确的是()A邻接矩阵存储图占用的存储空间大小只与图中定点个数有关,与边数无关B邻接矩阵存储图占用的存储空间大小只与图的边数有关,与定点个数无关C邻接...
  • Given input matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], rotate the input matrix in-place such that it becomes: [ [15,13, 2, 5], [14, 3, 4, 1], ...]
  • 我们在遍历图时往往会涉及到点的上下左右移动,使用二维数组对移动的方向做个记录,将变得简洁方便,下面给出了一个栗子(): #include struct Point{ int px; int py; }; int DIRECTION[4][2] = { {0,-1}, {0...
  • 确定输入是否可以表示地理(纬度,经度)坐标。 此函数不返回逐个元素的确定,而是如果所有输入 lat 值都在 -90 和 90 之间(含)并且所有输入 lon 值在 -180 和 360 之间(含),则返回 true。 如果 lat 或 lon 中...
  • 三维坐标结构体数组

    千次阅读 2019-06-11 11:03:34
    请定义一个表示三维坐标的结构体类型,用于存储点的三维坐标整数值。 在主函数中,输入N个点的三维坐标(X Y Z),并存储在结构体数组中。请你找出它们之中z轴坐标最大的点,并输出该点的三维坐标值。 为简化问题,...
  • 一个n行m列的矩阵被划分成t个矩形区域,分别数字1-t来标识,同一个区域内的元素都同一个数字标识。如下图所示,一个6行8列的矩阵被分成8个矩形区域,分别编号1-8标识。当两个小区域之间公用一条边时,称这两个...
  • 此函数返回向量、矩阵或多维数组坐标坐标可由用户定义,或表示元素在矩阵中的位置。
  • 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间空格隔开。 Output 对于每组输入数据,输出一行,结果保留两位小数。 Sample Input 0 0 0 1 0 1 1 0 Sample Ou...
  • 数组

    2017-10-18 16:10:36
    int 表示数组里的每一个元素都是一个整数 a 是变量名 但是,仅仅是这一句声明,不会创建数组 2.创建数组 创建数组的时候,要指明数组的长度。  new int[5]  引用概念:  如果变量代表一个数组,比如
  • 二维数组和稀疏数组 图 二维数组和稀疏数组的转化 二维数组转稀疏数组的思路 1.遍历原始的二维数组,得到有效数据的个数sum 2.根据sum就可以创建稀疏数组sparseArr int[sum+1] [3] 3.将二维数组的有效数据数据存入...
  • ] print(Z.T) 2、mgrid 1、代码 # 5j个点,步长为复数表示点数,为实数表示步长 # np.mgrid[start:end:step] x1, x2 = np.mgrid[-5:5:5j, -5:5:5j] # 输出结果 [[-5. -5. -5. -5. -5. ] [-2.5 -2.5 -2.5 -2.5 -2.5] ...
  • 建立两棵树状数组 分别表示当前点的左半边 和 右半边 的点的纵坐标 显然,初始所有点的纵坐标记录到 右半边R[]。 按照x坐标从左到右枚举中心点的横坐标 同时修改这一段的点的纵坐标在两个树状数组...
  • 校验经纬度坐标 二维数组格式 ^[(([([0-9].[0-9]),([0-9].[0-9])],))[([0-9].[0-9]),([0-9].[0-9]*)]]$

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,334
精华内容 50,533
关键字:

如何用数组表示坐标