简体   繁体   English

Z(X,Y)的轮廓

[英]Contour with Z(X,Y)

I have 我有

from pylab import *

###FUNCTIONS##
def LOSS(y0,y1):
    return sum(abs(y0-y1))

def genuchten(t,C,k):
    return 1/(1+(C/t)**k)**(1-1/k)

###MAIN#######
if __name__ == '__main__':
    t0 = linspace(0,10,100)
    f0 = genuchten(t0,3,3)

    x = linspace(1,10,10)
    y = linspace(1,10,10)
    X,Y = meshgrid(x,y)

    Z = zeros(shape(X))
    for i in range(len(x)):
        for j in range(len(y)):
            f = genuchten(t0,X[i][j],Y[i][j])
            Z[i][j] = LOSS(f0,f)

    contourf(X,Y,Z)
    show()

This works, but I feel there must be a more direct way. 这可行,但是我觉得必须有更直接的方法。 It seems MATLAB has an ARRAYFUN function that does this automatically? 看来MATLAB具有自动执行此功能的ARRAYFUN函数?

You can calculate this very quick by using broadcasting of ndarray: 您可以使用ndarray的广播非常快速地计算出这一点:

from pylab import *

def genuchten(t,C,k):
    return 1/(1+(C/t)**k)**(1-1/k)

###MAIN#######
t0, Y, X = ogrid[0:10:100j, 1:10:10j, 1:10:10j]
f0 = genuchten(t0, 3, 3)
f = genuchten(t0, X, Y)
Z = sum(abs(f0-f), axis=0)
contourf(X.ravel(), Y.ravel(), Z)
show()

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM