Interpolating within a grid in python
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I have a number of height values across a grid, specified in a series of lists:
[3, 1, -2, -3, -3] # x = 0m
[2, -7, -14, -30, -39] # x = 10m
[46, 22, 5, -2, -8] # x = 20m
The example above shows a 40m x 20m grid in the form
[x=0y=0, x=0y=10...][x=10y=0, x=10y=10...] etc.
I need to calculate the height at a specific x,y coordinate. I have looked at various interpolate functions and example but can't make any sense out of them - please help!
An example would be the height at x = 5m, y = 5m in teh grid above, which would be in the middle of the values 3, 1 2 and -7 (-1ish?)
Thanks
python interpolation
add a comment |
I have a number of height values across a grid, specified in a series of lists:
[3, 1, -2, -3, -3] # x = 0m
[2, -7, -14, -30, -39] # x = 10m
[46, 22, 5, -2, -8] # x = 20m
The example above shows a 40m x 20m grid in the form
[x=0y=0, x=0y=10...][x=10y=0, x=10y=10...] etc.
I need to calculate the height at a specific x,y coordinate. I have looked at various interpolate functions and example but can't make any sense out of them - please help!
An example would be the height at x = 5m, y = 5m in teh grid above, which would be in the middle of the values 3, 1 2 and -7 (-1ish?)
Thanks
python interpolation
Is it what you need? docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
– dyukha
Jan 3 at 12:34
You may want to check this post
– Cedric Zoppolo
Jan 3 at 17:49
add a comment |
I have a number of height values across a grid, specified in a series of lists:
[3, 1, -2, -3, -3] # x = 0m
[2, -7, -14, -30, -39] # x = 10m
[46, 22, 5, -2, -8] # x = 20m
The example above shows a 40m x 20m grid in the form
[x=0y=0, x=0y=10...][x=10y=0, x=10y=10...] etc.
I need to calculate the height at a specific x,y coordinate. I have looked at various interpolate functions and example but can't make any sense out of them - please help!
An example would be the height at x = 5m, y = 5m in teh grid above, which would be in the middle of the values 3, 1 2 and -7 (-1ish?)
Thanks
python interpolation
I have a number of height values across a grid, specified in a series of lists:
[3, 1, -2, -3, -3] # x = 0m
[2, -7, -14, -30, -39] # x = 10m
[46, 22, 5, -2, -8] # x = 20m
The example above shows a 40m x 20m grid in the form
[x=0y=0, x=0y=10...][x=10y=0, x=10y=10...] etc.
I need to calculate the height at a specific x,y coordinate. I have looked at various interpolate functions and example but can't make any sense out of them - please help!
An example would be the height at x = 5m, y = 5m in teh grid above, which would be in the middle of the values 3, 1 2 and -7 (-1ish?)
Thanks
python interpolation
python interpolation
asked Jan 3 at 12:26
tp503tp503
31
31
Is it what you need? docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
– dyukha
Jan 3 at 12:34
You may want to check this post
– Cedric Zoppolo
Jan 3 at 17:49
add a comment |
Is it what you need? docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
– dyukha
Jan 3 at 12:34
You may want to check this post
– Cedric Zoppolo
Jan 3 at 17:49
Is it what you need? docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
– dyukha
Jan 3 at 12:34
Is it what you need? docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
– dyukha
Jan 3 at 12:34
You may want to check this post
– Cedric Zoppolo
Jan 3 at 17:49
You may want to check this post
– Cedric Zoppolo
Jan 3 at 17:49
add a comment |
3 Answers
3
active
oldest
votes
You can use scipy.interpolate.interp2d
. The code below should do the job:
import numpy as np
from scipy.interpolate import interp2d
# Original data (e.g. measurements)
a = [3, 1, -2, -3, -3]
b = [2, -7, -14, -30, -39]
c = [46, 22, 5, -2, -8]
x = [0, 10, 20] # x-coordinates
y = [0, 10, 20, 30, 40] # y-coordinates
# Organise data in matrix
z = np.vstack([a, b, c]).T
# Create interpolation function
f_z = interp2d(x, y, z)
# Desired x/y values
x_interp = 5
y_interp = 5
# Collect interpolated z-value
z_interp = f_z(x_interp, y_interp)
print(z_interp) # (result: [-0.25])
This works perfectly, thank you!
– tp503
Jan 3 at 16:20
add a comment |
Solution: Transform into 2D array
import numpy as np
a = [3, 1, -2, -3, -3] # x = 0m
b = [2, -7, -14, -30, -39] # x = 10m
c = [46, 22, 5, -2, -8] # x = 20m
all_lists = [a,b,c]
grid = np.vstack(all_lists) # Edit: thanks @jochen for better code
>>print(grid.shape)
(3, 5)
Now you can access grid via x,y coordinates
grid[1,1]
and etc
Based on this, you can create logic.
If x = 5, y = 5, then you can create square corners indexes by this:
indexes: x/5 +0, x/5+1, y/5,y/5+1 ---> by combining them you get [0,0],[0,1],[1,0],[1,1]
At the end you just feed grid with those indexes
SUM = grid[0,0] + grid[0,1] + grid[1,0] + grid[1,1]
The construction of your grid is unnecessary complex. It could begrid = np.vstack([a, b, c])
Your code actually constructs and allocates memory for 3 grids, discarding the first two.
– jochen
Jan 3 at 14:10
thanks. I tried vstack and it just extended array, but with your code, it does it better
– Martin
Jan 3 at 14:46
add a comment |
You can achieve this with interpolate.gridddata
function from scipy
.
With below code you can get the any interpolation you want from your grid.
import itertools
import numpy as np
from scipy.interpolate import griddata
dataX0 = [3, 1, -2, -3, -3] # x = 0m
dataX10 = [2, -7, -14, -30, -39] # x = 10m
dataX20 = [46, 22, 5, -2, -8] # x = 20m
data = dataX0 + dataX10 + dataX20
points = list(itertools.product(range(0,30,10),range(0,50,10)))
outputPoint = (5,5)
outputValue = griddata(points=points,values=data, xi=outputPoint, method="cubic")
print outputValue
The example above give you the interpolation at ouputPoint
(5,5)
. And the output would give:
>>>
-2.78976054957
You may want to check this post
– Cedric Zoppolo
Jan 3 at 15:01
1
The post you linked applies to most answers given here. Perhaps you could add it as a comment to the original question, so that it is more likely to get noticed by other readers?
– MPA
Jan 3 at 15:19
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54022277%2finterpolating-within-a-grid-in-python%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use scipy.interpolate.interp2d
. The code below should do the job:
import numpy as np
from scipy.interpolate import interp2d
# Original data (e.g. measurements)
a = [3, 1, -2, -3, -3]
b = [2, -7, -14, -30, -39]
c = [46, 22, 5, -2, -8]
x = [0, 10, 20] # x-coordinates
y = [0, 10, 20, 30, 40] # y-coordinates
# Organise data in matrix
z = np.vstack([a, b, c]).T
# Create interpolation function
f_z = interp2d(x, y, z)
# Desired x/y values
x_interp = 5
y_interp = 5
# Collect interpolated z-value
z_interp = f_z(x_interp, y_interp)
print(z_interp) # (result: [-0.25])
This works perfectly, thank you!
– tp503
Jan 3 at 16:20
add a comment |
You can use scipy.interpolate.interp2d
. The code below should do the job:
import numpy as np
from scipy.interpolate import interp2d
# Original data (e.g. measurements)
a = [3, 1, -2, -3, -3]
b = [2, -7, -14, -30, -39]
c = [46, 22, 5, -2, -8]
x = [0, 10, 20] # x-coordinates
y = [0, 10, 20, 30, 40] # y-coordinates
# Organise data in matrix
z = np.vstack([a, b, c]).T
# Create interpolation function
f_z = interp2d(x, y, z)
# Desired x/y values
x_interp = 5
y_interp = 5
# Collect interpolated z-value
z_interp = f_z(x_interp, y_interp)
print(z_interp) # (result: [-0.25])
This works perfectly, thank you!
– tp503
Jan 3 at 16:20
add a comment |
You can use scipy.interpolate.interp2d
. The code below should do the job:
import numpy as np
from scipy.interpolate import interp2d
# Original data (e.g. measurements)
a = [3, 1, -2, -3, -3]
b = [2, -7, -14, -30, -39]
c = [46, 22, 5, -2, -8]
x = [0, 10, 20] # x-coordinates
y = [0, 10, 20, 30, 40] # y-coordinates
# Organise data in matrix
z = np.vstack([a, b, c]).T
# Create interpolation function
f_z = interp2d(x, y, z)
# Desired x/y values
x_interp = 5
y_interp = 5
# Collect interpolated z-value
z_interp = f_z(x_interp, y_interp)
print(z_interp) # (result: [-0.25])
You can use scipy.interpolate.interp2d
. The code below should do the job:
import numpy as np
from scipy.interpolate import interp2d
# Original data (e.g. measurements)
a = [3, 1, -2, -3, -3]
b = [2, -7, -14, -30, -39]
c = [46, 22, 5, -2, -8]
x = [0, 10, 20] # x-coordinates
y = [0, 10, 20, 30, 40] # y-coordinates
# Organise data in matrix
z = np.vstack([a, b, c]).T
# Create interpolation function
f_z = interp2d(x, y, z)
# Desired x/y values
x_interp = 5
y_interp = 5
# Collect interpolated z-value
z_interp = f_z(x_interp, y_interp)
print(z_interp) # (result: [-0.25])
answered Jan 3 at 14:02
MPAMPA
84711429
84711429
This works perfectly, thank you!
– tp503
Jan 3 at 16:20
add a comment |
This works perfectly, thank you!
– tp503
Jan 3 at 16:20
This works perfectly, thank you!
– tp503
Jan 3 at 16:20
This works perfectly, thank you!
– tp503
Jan 3 at 16:20
add a comment |
Solution: Transform into 2D array
import numpy as np
a = [3, 1, -2, -3, -3] # x = 0m
b = [2, -7, -14, -30, -39] # x = 10m
c = [46, 22, 5, -2, -8] # x = 20m
all_lists = [a,b,c]
grid = np.vstack(all_lists) # Edit: thanks @jochen for better code
>>print(grid.shape)
(3, 5)
Now you can access grid via x,y coordinates
grid[1,1]
and etc
Based on this, you can create logic.
If x = 5, y = 5, then you can create square corners indexes by this:
indexes: x/5 +0, x/5+1, y/5,y/5+1 ---> by combining them you get [0,0],[0,1],[1,0],[1,1]
At the end you just feed grid with those indexes
SUM = grid[0,0] + grid[0,1] + grid[1,0] + grid[1,1]
The construction of your grid is unnecessary complex. It could begrid = np.vstack([a, b, c])
Your code actually constructs and allocates memory for 3 grids, discarding the first two.
– jochen
Jan 3 at 14:10
thanks. I tried vstack and it just extended array, but with your code, it does it better
– Martin
Jan 3 at 14:46
add a comment |
Solution: Transform into 2D array
import numpy as np
a = [3, 1, -2, -3, -3] # x = 0m
b = [2, -7, -14, -30, -39] # x = 10m
c = [46, 22, 5, -2, -8] # x = 20m
all_lists = [a,b,c]
grid = np.vstack(all_lists) # Edit: thanks @jochen for better code
>>print(grid.shape)
(3, 5)
Now you can access grid via x,y coordinates
grid[1,1]
and etc
Based on this, you can create logic.
If x = 5, y = 5, then you can create square corners indexes by this:
indexes: x/5 +0, x/5+1, y/5,y/5+1 ---> by combining them you get [0,0],[0,1],[1,0],[1,1]
At the end you just feed grid with those indexes
SUM = grid[0,0] + grid[0,1] + grid[1,0] + grid[1,1]
The construction of your grid is unnecessary complex. It could begrid = np.vstack([a, b, c])
Your code actually constructs and allocates memory for 3 grids, discarding the first two.
– jochen
Jan 3 at 14:10
thanks. I tried vstack and it just extended array, but with your code, it does it better
– Martin
Jan 3 at 14:46
add a comment |
Solution: Transform into 2D array
import numpy as np
a = [3, 1, -2, -3, -3] # x = 0m
b = [2, -7, -14, -30, -39] # x = 10m
c = [46, 22, 5, -2, -8] # x = 20m
all_lists = [a,b,c]
grid = np.vstack(all_lists) # Edit: thanks @jochen for better code
>>print(grid.shape)
(3, 5)
Now you can access grid via x,y coordinates
grid[1,1]
and etc
Based on this, you can create logic.
If x = 5, y = 5, then you can create square corners indexes by this:
indexes: x/5 +0, x/5+1, y/5,y/5+1 ---> by combining them you get [0,0],[0,1],[1,0],[1,1]
At the end you just feed grid with those indexes
SUM = grid[0,0] + grid[0,1] + grid[1,0] + grid[1,1]
Solution: Transform into 2D array
import numpy as np
a = [3, 1, -2, -3, -3] # x = 0m
b = [2, -7, -14, -30, -39] # x = 10m
c = [46, 22, 5, -2, -8] # x = 20m
all_lists = [a,b,c]
grid = np.vstack(all_lists) # Edit: thanks @jochen for better code
>>print(grid.shape)
(3, 5)
Now you can access grid via x,y coordinates
grid[1,1]
and etc
Based on this, you can create logic.
If x = 5, y = 5, then you can create square corners indexes by this:
indexes: x/5 +0, x/5+1, y/5,y/5+1 ---> by combining them you get [0,0],[0,1],[1,0],[1,1]
At the end you just feed grid with those indexes
SUM = grid[0,0] + grid[0,1] + grid[1,0] + grid[1,1]
edited Jan 3 at 14:50
answered Jan 3 at 12:44
Martin Martin
1,5081516
1,5081516
The construction of your grid is unnecessary complex. It could begrid = np.vstack([a, b, c])
Your code actually constructs and allocates memory for 3 grids, discarding the first two.
– jochen
Jan 3 at 14:10
thanks. I tried vstack and it just extended array, but with your code, it does it better
– Martin
Jan 3 at 14:46
add a comment |
The construction of your grid is unnecessary complex. It could begrid = np.vstack([a, b, c])
Your code actually constructs and allocates memory for 3 grids, discarding the first two.
– jochen
Jan 3 at 14:10
thanks. I tried vstack and it just extended array, but with your code, it does it better
– Martin
Jan 3 at 14:46
The construction of your grid is unnecessary complex. It could be
grid = np.vstack([a, b, c])
Your code actually constructs and allocates memory for 3 grids, discarding the first two.– jochen
Jan 3 at 14:10
The construction of your grid is unnecessary complex. It could be
grid = np.vstack([a, b, c])
Your code actually constructs and allocates memory for 3 grids, discarding the first two.– jochen
Jan 3 at 14:10
thanks. I tried vstack and it just extended array, but with your code, it does it better
– Martin
Jan 3 at 14:46
thanks. I tried vstack and it just extended array, but with your code, it does it better
– Martin
Jan 3 at 14:46
add a comment |
You can achieve this with interpolate.gridddata
function from scipy
.
With below code you can get the any interpolation you want from your grid.
import itertools
import numpy as np
from scipy.interpolate import griddata
dataX0 = [3, 1, -2, -3, -3] # x = 0m
dataX10 = [2, -7, -14, -30, -39] # x = 10m
dataX20 = [46, 22, 5, -2, -8] # x = 20m
data = dataX0 + dataX10 + dataX20
points = list(itertools.product(range(0,30,10),range(0,50,10)))
outputPoint = (5,5)
outputValue = griddata(points=points,values=data, xi=outputPoint, method="cubic")
print outputValue
The example above give you the interpolation at ouputPoint
(5,5)
. And the output would give:
>>>
-2.78976054957
You may want to check this post
– Cedric Zoppolo
Jan 3 at 15:01
1
The post you linked applies to most answers given here. Perhaps you could add it as a comment to the original question, so that it is more likely to get noticed by other readers?
– MPA
Jan 3 at 15:19
add a comment |
You can achieve this with interpolate.gridddata
function from scipy
.
With below code you can get the any interpolation you want from your grid.
import itertools
import numpy as np
from scipy.interpolate import griddata
dataX0 = [3, 1, -2, -3, -3] # x = 0m
dataX10 = [2, -7, -14, -30, -39] # x = 10m
dataX20 = [46, 22, 5, -2, -8] # x = 20m
data = dataX0 + dataX10 + dataX20
points = list(itertools.product(range(0,30,10),range(0,50,10)))
outputPoint = (5,5)
outputValue = griddata(points=points,values=data, xi=outputPoint, method="cubic")
print outputValue
The example above give you the interpolation at ouputPoint
(5,5)
. And the output would give:
>>>
-2.78976054957
You may want to check this post
– Cedric Zoppolo
Jan 3 at 15:01
1
The post you linked applies to most answers given here. Perhaps you could add it as a comment to the original question, so that it is more likely to get noticed by other readers?
– MPA
Jan 3 at 15:19
add a comment |
You can achieve this with interpolate.gridddata
function from scipy
.
With below code you can get the any interpolation you want from your grid.
import itertools
import numpy as np
from scipy.interpolate import griddata
dataX0 = [3, 1, -2, -3, -3] # x = 0m
dataX10 = [2, -7, -14, -30, -39] # x = 10m
dataX20 = [46, 22, 5, -2, -8] # x = 20m
data = dataX0 + dataX10 + dataX20
points = list(itertools.product(range(0,30,10),range(0,50,10)))
outputPoint = (5,5)
outputValue = griddata(points=points,values=data, xi=outputPoint, method="cubic")
print outputValue
The example above give you the interpolation at ouputPoint
(5,5)
. And the output would give:
>>>
-2.78976054957
You can achieve this with interpolate.gridddata
function from scipy
.
With below code you can get the any interpolation you want from your grid.
import itertools
import numpy as np
from scipy.interpolate import griddata
dataX0 = [3, 1, -2, -3, -3] # x = 0m
dataX10 = [2, -7, -14, -30, -39] # x = 10m
dataX20 = [46, 22, 5, -2, -8] # x = 20m
data = dataX0 + dataX10 + dataX20
points = list(itertools.product(range(0,30,10),range(0,50,10)))
outputPoint = (5,5)
outputValue = griddata(points=points,values=data, xi=outputPoint, method="cubic")
print outputValue
The example above give you the interpolation at ouputPoint
(5,5)
. And the output would give:
>>>
-2.78976054957
edited Jan 3 at 15:03
answered Jan 3 at 14:48
Cedric ZoppoloCedric Zoppolo
1,36211529
1,36211529
You may want to check this post
– Cedric Zoppolo
Jan 3 at 15:01
1
The post you linked applies to most answers given here. Perhaps you could add it as a comment to the original question, so that it is more likely to get noticed by other readers?
– MPA
Jan 3 at 15:19
add a comment |
You may want to check this post
– Cedric Zoppolo
Jan 3 at 15:01
1
The post you linked applies to most answers given here. Perhaps you could add it as a comment to the original question, so that it is more likely to get noticed by other readers?
– MPA
Jan 3 at 15:19
You may want to check this post
– Cedric Zoppolo
Jan 3 at 15:01
You may want to check this post
– Cedric Zoppolo
Jan 3 at 15:01
1
1
The post you linked applies to most answers given here. Perhaps you could add it as a comment to the original question, so that it is more likely to get noticed by other readers?
– MPA
Jan 3 at 15:19
The post you linked applies to most answers given here. Perhaps you could add it as a comment to the original question, so that it is more likely to get noticed by other readers?
– MPA
Jan 3 at 15:19
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54022277%2finterpolating-within-a-grid-in-python%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
Is it what you need? docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
– dyukha
Jan 3 at 12:34
You may want to check this post
– Cedric Zoppolo
Jan 3 at 17:49