最近在学习遥感图像处理,老师要求我们从最基础的函数进行编写,包括:均值、中值、排序、众数、方差/协方差、相关系数、直方图/累积直方图,我是使用的python进行编写,代码直接如下:
"""
@time:2020/11/05
@author:nikojj
@describe:遥感统计与描述
"""
import numpy as np
import matplotlib. pyplot as plt
import sys
def aver_value ( array) :
sum = 0
k = array. size
( r, c) = array. shape
for i in range ( r) :
for j in range ( c) :
sum = sum + array[ i, j]
aver = sum / k
return aver
def mid_value ( array) :
( r, c) = array. shape
n = r * c
ar = [ ]
k = 0
for i in range ( r) :
for j in array[ i] :
ar. append( j)
for i in range ( len ( ar) - 1 ) :
for j in range ( i + 1 , len ( ar) ) :
if ar[ i] > ar[ j] :
ar[ i] , ar[ j] = ar[ j] , ar[ i]
if n % 2 == 0 :
return ( ar[ n // 2 ] + ar[ n // 2 - 1 ] ) // 2
else :
return ar[ n + 1 // 2 ]
def sort_row_value ( arr) :
( r, c) = arr. shape
for i in range ( r) :
for j in range ( c) :
for k in range ( j + 1 , c) :
if arr[ i] [ j] > arr[ i] [ k] :
arr[ i] [ j] , arr[ i] [ k] = arr[ i] [ k] , arr[ i] [ j]
return arr
def sort_col_value ( arr) :
( r, c) = arr. shape
for j in range ( c) :
for i in range ( r) :
for k in range ( i + 1 , r) :
if arr[ i] [ j] > arr[ k] [ j] :
arr[ i] [ j] , arr[ k] [ j] = arr[ k] [ j] , arr[ i] [ j]
return arr
def most_value ( array) :
( value, counts) = np. unique( array, return_counts= True )
print ( value)
print ( counts)
d = dict ( zip ( value, counts) )
print ( d)
max_c = max ( counts)
for k, v in d. items( ) :
if v == max_c:
return k
def var_value ( array) :
( r, c) = array. shape
m = aver_value( array)
s = 0
for i in range ( r) :
for j in array[ i] :
s = s + ( j - m) ** 2
var = s / ( r * c)
return var
def cov_value ( array1, array2) :
if array1. shape != array2. shape:
print ( "二个数组大小不一致!" )
sys. exit( 1 )
( r, c) = array1. shape
m1 = aver_value( array1)
m2 = aver_value( array2)
s = 0
for i in range ( r) :
for j in range ( c) :
s = s + ( array1[ i] [ j] - m1) * ( array2[ i] [ j] - m2)
cov = s / ( r * c)
return cov
def correla ( array1, array2) :
cov = cov_value( array1, array2)
v1 = var_value( array1)
v2 = var_value( array2)
cor = cov / ( np. sqrt( v1 * v2) )
return cor
def bar_fig ( ar) :
( value, counts) = np. unique( ar, return_counts= True )
plt. bar( value, height= counts, color= 'y' )
plt. xlabel( 'value' )
plt. ylabel( 'frequency' )
plt. grid( )
plt. show( )
def bar_fig_acc ( ar) :
( value, counts) = np. unique( ar, return_counts= True )
print ( value)
print ( counts)
print ( counts[ 0 ] )
fre = { }
fre[ 0 ] = counts[ 0 ]
for i in range ( 1 , len ( counts) ) :
fre[ i] = fre[ i - 1 ] + counts[ i]
fre = list ( fre. values( ) )
plt. bar( value, fre / sum ( counts) )
plt. xlabel( 'value' )
plt. ylabel( 'Cumulative frequency' )
plt. grid( )
plt. show( )
return fre
ar1 = np. array( [ [ 1 , 5 , 9 , 4 ] , [ 3 , 5 , 6 , 8 ] , [ 7 , 5 , 1 , 3 ] ] )
print ( most_value( ar1) )
ar2 = np. array( [ [ 2 , 5 , 7 , 9 ] , [ 2 , 1 , 5 , 7 ] , [ 3 , 6 , 8 , 7 ] ] )
print ( cov_value( ar1, ar2) )