Python - How to get z value from given x, y after surface discrete 3D points (x,y,z)










0















I am newbie at Python. I am using a block code to draw the surface from discrete 3D points as a block code below:



#!/usr/bin/python3

import sys
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy import array, newaxis

DATA = array([
[-0.807237702464, 0.904373229492, 111.428744443],
[-0.802470821517, 0.832159465335, 98.572957317],
[-0.801052795982, 0.744231916692, 86.485869328],
[-0.802505546206, 0.642324228721, 75.279804677],
[-0.804158144115, 0.52882485495, 65.112895758],
[-0.806418040943, 0.405733109371, 56.1627277595],
[-0.808515314192, 0.275100227689, 48.508994388],
[-0.809879521648, 0.139140394575, 42.1027499025],
[-0.810645106092, -7.48279012695e-06, 36.8668106345],
[-0.810676720161, -0.139773175337, 32.714580273],
[-0.811308686707, -0.277276065449, 29.5977405865],
[-0.812331692291, -0.40975978382, 27.6210856615],
[-0.816075037319, -0.535615685086, 27.2420699235],
[-0.823691366944, -0.654350489595, 29.1823292975],
[-0.836688691603, -0.765630198427, 34.2275056775],
[-0.854984518665, -0.86845932028, 43.029581434],
[-0.879261949054, -0.961799684483, 55.9594146815],
[-0.740499820944, 0.901631050387, 97.0261463995],
[-0.735011699497, 0.82881933383, 84.971061395],
[-0.733021568161, 0.740454485354, 73.733621269],
[-0.732821755233, 0.638770044767, 63.3815970475],
[-0.733876941678, 0.525818698874, 54.0655910105],
[-0.735055978521, 0.403303715698, 45.90859502],
[-0.736448900325, 0.273425879041, 38.935709456],
[-0.737556181137, 0.13826504904, 33.096106049],
[-0.738278724065, -9.73058423274e-06, 28.359664343],
[-0.738507612286, -0.138781586244, 24.627237837],
[-0.738539663773, -0.275090412979, 21.857410904],
[-0.739099040189, -0.406068448513, 20.1110519655],
[-0.741152200369, -0.529726022182, 19.7019157715],
])

Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()
plt.show()


Now I want to get Z value from any X and Y like z = f(x,y) but I don't know how can i do it.
Anyone have solution to help me.



Thank you so much.










share|improve this question



















  • 1





    Are your points unique? in other words, is your surface/function guaranteed to not have 2 different Z coordinates with the same X and Y combination?

    – robotHamster
    Nov 14 '18 at 8:52











  • Do you want to get the z value at an exact point, or do you want to get the nearest neighbor z value?

    – Nils Werner
    Nov 15 '18 at 9:40















0















I am newbie at Python. I am using a block code to draw the surface from discrete 3D points as a block code below:



#!/usr/bin/python3

import sys
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy import array, newaxis

DATA = array([
[-0.807237702464, 0.904373229492, 111.428744443],
[-0.802470821517, 0.832159465335, 98.572957317],
[-0.801052795982, 0.744231916692, 86.485869328],
[-0.802505546206, 0.642324228721, 75.279804677],
[-0.804158144115, 0.52882485495, 65.112895758],
[-0.806418040943, 0.405733109371, 56.1627277595],
[-0.808515314192, 0.275100227689, 48.508994388],
[-0.809879521648, 0.139140394575, 42.1027499025],
[-0.810645106092, -7.48279012695e-06, 36.8668106345],
[-0.810676720161, -0.139773175337, 32.714580273],
[-0.811308686707, -0.277276065449, 29.5977405865],
[-0.812331692291, -0.40975978382, 27.6210856615],
[-0.816075037319, -0.535615685086, 27.2420699235],
[-0.823691366944, -0.654350489595, 29.1823292975],
[-0.836688691603, -0.765630198427, 34.2275056775],
[-0.854984518665, -0.86845932028, 43.029581434],
[-0.879261949054, -0.961799684483, 55.9594146815],
[-0.740499820944, 0.901631050387, 97.0261463995],
[-0.735011699497, 0.82881933383, 84.971061395],
[-0.733021568161, 0.740454485354, 73.733621269],
[-0.732821755233, 0.638770044767, 63.3815970475],
[-0.733876941678, 0.525818698874, 54.0655910105],
[-0.735055978521, 0.403303715698, 45.90859502],
[-0.736448900325, 0.273425879041, 38.935709456],
[-0.737556181137, 0.13826504904, 33.096106049],
[-0.738278724065, -9.73058423274e-06, 28.359664343],
[-0.738507612286, -0.138781586244, 24.627237837],
[-0.738539663773, -0.275090412979, 21.857410904],
[-0.739099040189, -0.406068448513, 20.1110519655],
[-0.741152200369, -0.529726022182, 19.7019157715],
])

Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()
plt.show()


Now I want to get Z value from any X and Y like z = f(x,y) but I don't know how can i do it.
Anyone have solution to help me.



Thank you so much.










share|improve this question



















  • 1





    Are your points unique? in other words, is your surface/function guaranteed to not have 2 different Z coordinates with the same X and Y combination?

    – robotHamster
    Nov 14 '18 at 8:52











  • Do you want to get the z value at an exact point, or do you want to get the nearest neighbor z value?

    – Nils Werner
    Nov 15 '18 at 9:40













0












0








0








I am newbie at Python. I am using a block code to draw the surface from discrete 3D points as a block code below:



#!/usr/bin/python3

import sys
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy import array, newaxis

DATA = array([
[-0.807237702464, 0.904373229492, 111.428744443],
[-0.802470821517, 0.832159465335, 98.572957317],
[-0.801052795982, 0.744231916692, 86.485869328],
[-0.802505546206, 0.642324228721, 75.279804677],
[-0.804158144115, 0.52882485495, 65.112895758],
[-0.806418040943, 0.405733109371, 56.1627277595],
[-0.808515314192, 0.275100227689, 48.508994388],
[-0.809879521648, 0.139140394575, 42.1027499025],
[-0.810645106092, -7.48279012695e-06, 36.8668106345],
[-0.810676720161, -0.139773175337, 32.714580273],
[-0.811308686707, -0.277276065449, 29.5977405865],
[-0.812331692291, -0.40975978382, 27.6210856615],
[-0.816075037319, -0.535615685086, 27.2420699235],
[-0.823691366944, -0.654350489595, 29.1823292975],
[-0.836688691603, -0.765630198427, 34.2275056775],
[-0.854984518665, -0.86845932028, 43.029581434],
[-0.879261949054, -0.961799684483, 55.9594146815],
[-0.740499820944, 0.901631050387, 97.0261463995],
[-0.735011699497, 0.82881933383, 84.971061395],
[-0.733021568161, 0.740454485354, 73.733621269],
[-0.732821755233, 0.638770044767, 63.3815970475],
[-0.733876941678, 0.525818698874, 54.0655910105],
[-0.735055978521, 0.403303715698, 45.90859502],
[-0.736448900325, 0.273425879041, 38.935709456],
[-0.737556181137, 0.13826504904, 33.096106049],
[-0.738278724065, -9.73058423274e-06, 28.359664343],
[-0.738507612286, -0.138781586244, 24.627237837],
[-0.738539663773, -0.275090412979, 21.857410904],
[-0.739099040189, -0.406068448513, 20.1110519655],
[-0.741152200369, -0.529726022182, 19.7019157715],
])

Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()
plt.show()


Now I want to get Z value from any X and Y like z = f(x,y) but I don't know how can i do it.
Anyone have solution to help me.



Thank you so much.










share|improve this question
















I am newbie at Python. I am using a block code to draw the surface from discrete 3D points as a block code below:



#!/usr/bin/python3

import sys
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy import array, newaxis

DATA = array([
[-0.807237702464, 0.904373229492, 111.428744443],
[-0.802470821517, 0.832159465335, 98.572957317],
[-0.801052795982, 0.744231916692, 86.485869328],
[-0.802505546206, 0.642324228721, 75.279804677],
[-0.804158144115, 0.52882485495, 65.112895758],
[-0.806418040943, 0.405733109371, 56.1627277595],
[-0.808515314192, 0.275100227689, 48.508994388],
[-0.809879521648, 0.139140394575, 42.1027499025],
[-0.810645106092, -7.48279012695e-06, 36.8668106345],
[-0.810676720161, -0.139773175337, 32.714580273],
[-0.811308686707, -0.277276065449, 29.5977405865],
[-0.812331692291, -0.40975978382, 27.6210856615],
[-0.816075037319, -0.535615685086, 27.2420699235],
[-0.823691366944, -0.654350489595, 29.1823292975],
[-0.836688691603, -0.765630198427, 34.2275056775],
[-0.854984518665, -0.86845932028, 43.029581434],
[-0.879261949054, -0.961799684483, 55.9594146815],
[-0.740499820944, 0.901631050387, 97.0261463995],
[-0.735011699497, 0.82881933383, 84.971061395],
[-0.733021568161, 0.740454485354, 73.733621269],
[-0.732821755233, 0.638770044767, 63.3815970475],
[-0.733876941678, 0.525818698874, 54.0655910105],
[-0.735055978521, 0.403303715698, 45.90859502],
[-0.736448900325, 0.273425879041, 38.935709456],
[-0.737556181137, 0.13826504904, 33.096106049],
[-0.738278724065, -9.73058423274e-06, 28.359664343],
[-0.738507612286, -0.138781586244, 24.627237837],
[-0.738539663773, -0.275090412979, 21.857410904],
[-0.739099040189, -0.406068448513, 20.1110519655],
[-0.741152200369, -0.529726022182, 19.7019157715],
])

Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()
plt.show()


Now I want to get Z value from any X and Y like z = f(x,y) but I don't know how can i do it.
Anyone have solution to help me.



Thank you so much.







python matplotlib






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 '18 at 12:57







Tan Duong

















asked Nov 14 '18 at 8:46









Tan DuongTan Duong

42




42







  • 1





    Are your points unique? in other words, is your surface/function guaranteed to not have 2 different Z coordinates with the same X and Y combination?

    – robotHamster
    Nov 14 '18 at 8:52











  • Do you want to get the z value at an exact point, or do you want to get the nearest neighbor z value?

    – Nils Werner
    Nov 15 '18 at 9:40












  • 1





    Are your points unique? in other words, is your surface/function guaranteed to not have 2 different Z coordinates with the same X and Y combination?

    – robotHamster
    Nov 14 '18 at 8:52











  • Do you want to get the z value at an exact point, or do you want to get the nearest neighbor z value?

    – Nils Werner
    Nov 15 '18 at 9:40







1




1





Are your points unique? in other words, is your surface/function guaranteed to not have 2 different Z coordinates with the same X and Y combination?

– robotHamster
Nov 14 '18 at 8:52





Are your points unique? in other words, is your surface/function guaranteed to not have 2 different Z coordinates with the same X and Y combination?

– robotHamster
Nov 14 '18 at 8:52













Do you want to get the z value at an exact point, or do you want to get the nearest neighbor z value?

– Nils Werner
Nov 15 '18 at 9:40





Do you want to get the z value at an exact point, or do you want to get the nearest neighbor z value?

– Nils Werner
Nov 15 '18 at 9:40












2 Answers
2






active

oldest

votes


















1














If you want to to turn this array of points into a continuous function with input x,y and output z, you need to describe it with a model. A model allows for interpolation of points.



I assume this array of points describes a surface plot, but plotting it is unnecessary.



A surface plot looks like this (I can only provide the link):
surface plot



Each quadrilateral in the surface plot is defined by 4 points and represents part of a plane. So, a function to describe your array would be piece wise of all the different planes which make up your surface plot.



A plane requires 3 points to define it, so create a function to go through the array selecting 3 points in order, finding the equation of the plane and then adding it to an array of equations.



Code to find equation given 3 points:



def equation_plane(x1, y1, z1, x2, y2, z2, x3, y3, z3): 
a1 = x2 - x1
b1 = y2 - y1
c1 = z2 - z1
a2 = x3 - x1
b2 = y3 - y1
c2 = z3 - z1
a = b1 * c2 - b2 * c1
b = a2 * c1 - a1 * c2
c = a1 * b2 - b1 * a2
d = (- a * x1 - b * y1 - c * z1)
print "equation of plane is ",
print a, "x +",
print b, "y +",
print c, "z +",
print d, "= 0."


Then for a given x and y find which plane contains these x and y points (use code similar to nils werners answer), get the corresponding equation and use that function to get the z coordinate.






share|improve this answer






























    0














    This is a simple numpy array comparison and indexing problem. For a given pair of x, y



    xy = numpy.array([-0.802470821517, 0.832159465335])


    we can compare all rows to this at once, using



    numpy.isclose(DATA[:, :2], xy)
    # array([[False, False],
    # [ True, True],
    # [False, False],
    # ....
    # [False, False],
    # [False, False]])


    This will give us two boolean values per row, one for x and one for y. We are only interested in rows where both are True, so



    numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1)
    # array([False, True, False, ..., False, False, False, False])


    The result we can then use to index DATA again, and extract z like



    DATA[numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1), -1]
    # array([98.57295732])





    share|improve this answer























    • Thank Nils for your answer. However, in case I want to get z value for a given pair of (x = -0.8, y = -0.5) your solution doesn't work. After linearize the discrete 3D point, I want to get z value in different pair of (x,y) in given DATA. Do you have any solution else for that ? Thank you

      – Tan Duong
      Nov 14 '18 at 13:06






    • 1





      Well -0.8, -0.5 don't exist in your x, y values, what do you expect?

      – Nils Werner
      Nov 15 '18 at 9:40










    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53296122%2fpython-how-to-get-z-value-from-given-x-y-after-surface-discrete-3d-points-x%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    If you want to to turn this array of points into a continuous function with input x,y and output z, you need to describe it with a model. A model allows for interpolation of points.



    I assume this array of points describes a surface plot, but plotting it is unnecessary.



    A surface plot looks like this (I can only provide the link):
    surface plot



    Each quadrilateral in the surface plot is defined by 4 points and represents part of a plane. So, a function to describe your array would be piece wise of all the different planes which make up your surface plot.



    A plane requires 3 points to define it, so create a function to go through the array selecting 3 points in order, finding the equation of the plane and then adding it to an array of equations.



    Code to find equation given 3 points:



    def equation_plane(x1, y1, z1, x2, y2, z2, x3, y3, z3): 
    a1 = x2 - x1
    b1 = y2 - y1
    c1 = z2 - z1
    a2 = x3 - x1
    b2 = y3 - y1
    c2 = z3 - z1
    a = b1 * c2 - b2 * c1
    b = a2 * c1 - a1 * c2
    c = a1 * b2 - b1 * a2
    d = (- a * x1 - b * y1 - c * z1)
    print "equation of plane is ",
    print a, "x +",
    print b, "y +",
    print c, "z +",
    print d, "= 0."


    Then for a given x and y find which plane contains these x and y points (use code similar to nils werners answer), get the corresponding equation and use that function to get the z coordinate.






    share|improve this answer



























      1














      If you want to to turn this array of points into a continuous function with input x,y and output z, you need to describe it with a model. A model allows for interpolation of points.



      I assume this array of points describes a surface plot, but plotting it is unnecessary.



      A surface plot looks like this (I can only provide the link):
      surface plot



      Each quadrilateral in the surface plot is defined by 4 points and represents part of a plane. So, a function to describe your array would be piece wise of all the different planes which make up your surface plot.



      A plane requires 3 points to define it, so create a function to go through the array selecting 3 points in order, finding the equation of the plane and then adding it to an array of equations.



      Code to find equation given 3 points:



      def equation_plane(x1, y1, z1, x2, y2, z2, x3, y3, z3): 
      a1 = x2 - x1
      b1 = y2 - y1
      c1 = z2 - z1
      a2 = x3 - x1
      b2 = y3 - y1
      c2 = z3 - z1
      a = b1 * c2 - b2 * c1
      b = a2 * c1 - a1 * c2
      c = a1 * b2 - b1 * a2
      d = (- a * x1 - b * y1 - c * z1)
      print "equation of plane is ",
      print a, "x +",
      print b, "y +",
      print c, "z +",
      print d, "= 0."


      Then for a given x and y find which plane contains these x and y points (use code similar to nils werners answer), get the corresponding equation and use that function to get the z coordinate.






      share|improve this answer

























        1












        1








        1







        If you want to to turn this array of points into a continuous function with input x,y and output z, you need to describe it with a model. A model allows for interpolation of points.



        I assume this array of points describes a surface plot, but plotting it is unnecessary.



        A surface plot looks like this (I can only provide the link):
        surface plot



        Each quadrilateral in the surface plot is defined by 4 points and represents part of a plane. So, a function to describe your array would be piece wise of all the different planes which make up your surface plot.



        A plane requires 3 points to define it, so create a function to go through the array selecting 3 points in order, finding the equation of the plane and then adding it to an array of equations.



        Code to find equation given 3 points:



        def equation_plane(x1, y1, z1, x2, y2, z2, x3, y3, z3): 
        a1 = x2 - x1
        b1 = y2 - y1
        c1 = z2 - z1
        a2 = x3 - x1
        b2 = y3 - y1
        c2 = z3 - z1
        a = b1 * c2 - b2 * c1
        b = a2 * c1 - a1 * c2
        c = a1 * b2 - b1 * a2
        d = (- a * x1 - b * y1 - c * z1)
        print "equation of plane is ",
        print a, "x +",
        print b, "y +",
        print c, "z +",
        print d, "= 0."


        Then for a given x and y find which plane contains these x and y points (use code similar to nils werners answer), get the corresponding equation and use that function to get the z coordinate.






        share|improve this answer













        If you want to to turn this array of points into a continuous function with input x,y and output z, you need to describe it with a model. A model allows for interpolation of points.



        I assume this array of points describes a surface plot, but plotting it is unnecessary.



        A surface plot looks like this (I can only provide the link):
        surface plot



        Each quadrilateral in the surface plot is defined by 4 points and represents part of a plane. So, a function to describe your array would be piece wise of all the different planes which make up your surface plot.



        A plane requires 3 points to define it, so create a function to go through the array selecting 3 points in order, finding the equation of the plane and then adding it to an array of equations.



        Code to find equation given 3 points:



        def equation_plane(x1, y1, z1, x2, y2, z2, x3, y3, z3): 
        a1 = x2 - x1
        b1 = y2 - y1
        c1 = z2 - z1
        a2 = x3 - x1
        b2 = y3 - y1
        c2 = z3 - z1
        a = b1 * c2 - b2 * c1
        b = a2 * c1 - a1 * c2
        c = a1 * b2 - b1 * a2
        d = (- a * x1 - b * y1 - c * z1)
        print "equation of plane is ",
        print a, "x +",
        print b, "y +",
        print c, "z +",
        print d, "= 0."


        Then for a given x and y find which plane contains these x and y points (use code similar to nils werners answer), get the corresponding equation and use that function to get the z coordinate.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 13 at 10:59









        Joe ClintonJoe Clinton

        134




        134























            0














            This is a simple numpy array comparison and indexing problem. For a given pair of x, y



            xy = numpy.array([-0.802470821517, 0.832159465335])


            we can compare all rows to this at once, using



            numpy.isclose(DATA[:, :2], xy)
            # array([[False, False],
            # [ True, True],
            # [False, False],
            # ....
            # [False, False],
            # [False, False]])


            This will give us two boolean values per row, one for x and one for y. We are only interested in rows where both are True, so



            numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1)
            # array([False, True, False, ..., False, False, False, False])


            The result we can then use to index DATA again, and extract z like



            DATA[numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1), -1]
            # array([98.57295732])





            share|improve this answer























            • Thank Nils for your answer. However, in case I want to get z value for a given pair of (x = -0.8, y = -0.5) your solution doesn't work. After linearize the discrete 3D point, I want to get z value in different pair of (x,y) in given DATA. Do you have any solution else for that ? Thank you

              – Tan Duong
              Nov 14 '18 at 13:06






            • 1





              Well -0.8, -0.5 don't exist in your x, y values, what do you expect?

              – Nils Werner
              Nov 15 '18 at 9:40















            0














            This is a simple numpy array comparison and indexing problem. For a given pair of x, y



            xy = numpy.array([-0.802470821517, 0.832159465335])


            we can compare all rows to this at once, using



            numpy.isclose(DATA[:, :2], xy)
            # array([[False, False],
            # [ True, True],
            # [False, False],
            # ....
            # [False, False],
            # [False, False]])


            This will give us two boolean values per row, one for x and one for y. We are only interested in rows where both are True, so



            numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1)
            # array([False, True, False, ..., False, False, False, False])


            The result we can then use to index DATA again, and extract z like



            DATA[numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1), -1]
            # array([98.57295732])





            share|improve this answer























            • Thank Nils for your answer. However, in case I want to get z value for a given pair of (x = -0.8, y = -0.5) your solution doesn't work. After linearize the discrete 3D point, I want to get z value in different pair of (x,y) in given DATA. Do you have any solution else for that ? Thank you

              – Tan Duong
              Nov 14 '18 at 13:06






            • 1





              Well -0.8, -0.5 don't exist in your x, y values, what do you expect?

              – Nils Werner
              Nov 15 '18 at 9:40













            0












            0








            0







            This is a simple numpy array comparison and indexing problem. For a given pair of x, y



            xy = numpy.array([-0.802470821517, 0.832159465335])


            we can compare all rows to this at once, using



            numpy.isclose(DATA[:, :2], xy)
            # array([[False, False],
            # [ True, True],
            # [False, False],
            # ....
            # [False, False],
            # [False, False]])


            This will give us two boolean values per row, one for x and one for y. We are only interested in rows where both are True, so



            numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1)
            # array([False, True, False, ..., False, False, False, False])


            The result we can then use to index DATA again, and extract z like



            DATA[numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1), -1]
            # array([98.57295732])





            share|improve this answer













            This is a simple numpy array comparison and indexing problem. For a given pair of x, y



            xy = numpy.array([-0.802470821517, 0.832159465335])


            we can compare all rows to this at once, using



            numpy.isclose(DATA[:, :2], xy)
            # array([[False, False],
            # [ True, True],
            # [False, False],
            # ....
            # [False, False],
            # [False, False]])


            This will give us two boolean values per row, one for x and one for y. We are only interested in rows where both are True, so



            numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1)
            # array([False, True, False, ..., False, False, False, False])


            The result we can then use to index DATA again, and extract z like



            DATA[numpy.all(numpy.isclose(DATA[:, :2], xy), axis=1), -1]
            # array([98.57295732])






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 14 '18 at 9:07









            Nils WernerNils Werner

            18k14264




            18k14264












            • Thank Nils for your answer. However, in case I want to get z value for a given pair of (x = -0.8, y = -0.5) your solution doesn't work. After linearize the discrete 3D point, I want to get z value in different pair of (x,y) in given DATA. Do you have any solution else for that ? Thank you

              – Tan Duong
              Nov 14 '18 at 13:06






            • 1





              Well -0.8, -0.5 don't exist in your x, y values, what do you expect?

              – Nils Werner
              Nov 15 '18 at 9:40

















            • Thank Nils for your answer. However, in case I want to get z value for a given pair of (x = -0.8, y = -0.5) your solution doesn't work. After linearize the discrete 3D point, I want to get z value in different pair of (x,y) in given DATA. Do you have any solution else for that ? Thank you

              – Tan Duong
              Nov 14 '18 at 13:06






            • 1





              Well -0.8, -0.5 don't exist in your x, y values, what do you expect?

              – Nils Werner
              Nov 15 '18 at 9:40
















            Thank Nils for your answer. However, in case I want to get z value for a given pair of (x = -0.8, y = -0.5) your solution doesn't work. After linearize the discrete 3D point, I want to get z value in different pair of (x,y) in given DATA. Do you have any solution else for that ? Thank you

            – Tan Duong
            Nov 14 '18 at 13:06





            Thank Nils for your answer. However, in case I want to get z value for a given pair of (x = -0.8, y = -0.5) your solution doesn't work. After linearize the discrete 3D point, I want to get z value in different pair of (x,y) in given DATA. Do you have any solution else for that ? Thank you

            – Tan Duong
            Nov 14 '18 at 13:06




            1




            1





            Well -0.8, -0.5 don't exist in your x, y values, what do you expect?

            – Nils Werner
            Nov 15 '18 at 9:40





            Well -0.8, -0.5 don't exist in your x, y values, what do you expect?

            – Nils Werner
            Nov 15 '18 at 9:40

















            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53296122%2fpython-how-to-get-z-value-from-given-x-y-after-surface-discrete-3d-points-x%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

            Syphilis

            Darth Vader #20