Python中Numpy的用法

部分Numpy模块的应用https://www.cjavapy.com/4/

在处理遥感数据或者进行遥感影像结果预测的时候,经常会遇到numpy模块的使用

使用频繁且应用较多,因此将运用代码时用过的numpy模块的一些用法进行整理和梳理,后续会在遇到的实例越来越多的时候,不断进行补充。

Numpy——一种开源的数值计算扩展库

pip install numpy

import numpy as np

Numpy两大类对象

narray:单一数据类型的多维数组

ufunc:

        对数组每个元素进行算术、逻辑及函数运算

        对narray对象进行运算的速度比使用循环或者列表推导式要快很多

narray对象

  • narray的创建

①使用array创建

一维:a = np.array([1,2,3])

二维:b = np.array([[1,2,3],[4,5,6]])

②指定值创建

c = np.zeros(10,dtype = 'int'),全指定为0

d = np.zeros(10,dtype = 'float),全指定为1

e = np.empty(10),全指定为空,接近0

  • narray的属性和方法
  • narray的切片

1、np.zeros()

源代码:

# 指定数据类型
    # opencv数据转gdal
    # cv2.imread()读取的图像像素数组格式为(Width,Height,BandNum),读入的彩色图像是BGR模式
    # gdal.Open().ReadAsArray()读取的图像像素数组格式为(BandNum,Width,Height)
def GdalData2OpencvData(GdalImg_data):
    if 'int8' in GdalImg_data.dtype.name:
        # 输入的GdalImg_data是一个numpy.array类型,detype的名字来对应gdal的daatype类型
        OpencvImg_data = np.zeros((GdalImg_data.shape[1], GdalImg_data.shape[2], GdalImg_data.shape[0]), np.uint8)
    elif 'int16' in GdalImg_data.dtype.name:
        OpencvImg_data = np.zeros((GdalImg_data.shape[1], GdalImg_data.shape[2], GdalImg_data.shape[0]), np.uint16)
    else:
        OpencvImg_data = np.zeros((GdalImg_data.shape[1], GdalImg_data.shape[2], GdalImg_data.shape[0]), np.float32)
    for i in range(GdalImg_data.shape[0]):
        OpencvImg_data[:, :, i] = GdalImg_data[GdalImg_data.shape[0] - i - 1, :, :]
    return OpencvImg_data

使用场景:遥感影像提取结果预测时,将opencv数据转为gdal数据,由于cv2.imread()和gdal.open()读取的图像格式不同,因此需要进行数据类型的转换。

numpy.zeros(shape,dtype=float,order='C',*,like=None)

返回给定形状和类型的新数组,用零填充。

参数1:shape——形状,传入一个数字,它将生成一个一维的向量;传入一个元组,它将生成以元组中各数字作为纬度值的矩阵。

对于图像来说:

        img.shape[0]:图像的垂直尺寸(高度)

        img.shape[1]:图像的水平尺寸(宽度)

        img.shape[2]:图像的通道数

对于矩阵来说:

        shape[0]:表示矩阵的行数

        shape[1]:表示矩阵的列数

参数2:dtype——数据类型,可选,默认为float,源代码为整型

2、np.argmax()

numpy.argmax(array, axis) 用于返回一个numpy数组中最大值的索引值。当一组中同时出现几个最大值时,返回第一个最大值的索引值。

axis参数不出现时,此时将数组平铺,找出其中最大的那个值的索引。

若axis=1,表明按行比较,输出每行中最大值的索引,若axis=0,则输出每列中最大值的索引。

参考文章:numpy.argmax()

关于返回通道数这部分的知识还不是很清楚,以后搞明白了再补充。 

你可能感兴趣的:(python学习,numpy)