gpt4 book ai didi

python - 用numpy旋转网格

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:08 25 4
gpt4 key购买 nike

我想生成一个坐标已旋转的网格。我必须在双循环中进行旋转,而且我确信有更好的方法对其进行矢量化。代码如下:

# Define the range for x and y in the unrotated matrix
xspan = linspace(-2*pi, 2*pi, 101)
yspan = linspace(-2*pi, 2*pi, 101)

# Generate a meshgrid and rotate it by RotRad radians.
def DoRotation(xspan, yspan, RotRad=0):

# Clockwise, 2D rotation matrix
RotMatrix = np.array([ [np.cos(RotRad), np.sin(RotRad)],
[-np.sin(RotRad), np.cos(RotRad)]])
print RotMatrix

# This makes two 2D arrays which are the x and y coordinates for each point.
x, y = meshgrid(xspan,yspan)

# After rotating, I'll have another two 2D arrays with the same shapes.
xrot = zeros(x.shape)
yrot = zeros(y.shape)

# Dot the rotation matrix against each coordinate from the meshgrids.
# I BELIEVE THERE IS A BETTER WAY THAN THIS DOUBLE LOOP!!!
# I BELIEVE THERE IS A BETTER WAY THAN THIS DOUBLE LOOP!!!
# I BELIEVE THERE IS A BETTER WAY THAN THIS DOUBLE LOOP!!!
# I BELIEVE THERE IS A BETTER WAY THAN THIS DOUBLE LOOP!!!
# I BELIEVE THERE IS A BETTER WAY THAN THIS DOUBLE LOOP!!!
# I BELIEVE THERE IS A BETTER WAY THAN THIS DOUBLE LOOP!!!
for i in range(len(xspan)):
for j in range(len(yspan)):
xrot[i,j], yrot[i,j] = dot(RotMatrix, array([x[i,j], y[i,j]]))

# Now the matrix is rotated
return xrot, yrot

# Pick some arbitrary function and plot it (no rotation)
x, y = DoRotation(xspan, yspan, 0)
z = sin(x)+cos(y)
imshow(z)

enter image description here

# And now with 0.3 radian rotation so you can see that it works.
x, y = DoRotation(xspan, yspan, 0.3)
z = sin(x)+cos(y)
figure()
imshow(z)

enter image description here

在两个网格上写一个双循环似乎很愚蠢。有哪位高手知道如何对其进行矢量化吗?

最佳答案

也许我误解了这个问题,但我通常只是...

import numpy as np

pi = np.pi

x = np.linspace(-2.*pi, 2.*pi, 1001)
y = x.copy()

X, Y = np.meshgrid(x, y)

Xr = np.cos(rot)*X + np.sin(rot)*Y # "cloclwise"
Yr = -np.sin(rot)*X + np.cos(rot)*Y

z = np.sin(Xr) + np.cos(Yr)

~100ms也是

关于python - 用numpy旋转网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29708840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com