如何将1D矢量f(r)转换为具有对称旋转的图像。我正在使用python 2.7。
我想用一个数字做什么。我希望图像在右边,左边有一个矢量:
非常感谢。
答案 0 :(得分:4)
你可以在它的中心建立一个零点的距离矩阵,并将其作为你想要的任何函数的参数:
import numpy as np
import matplotlib.pyplot as plt
def centeredDistanceMatrix(n):
# make sure n is odd
x,y = np.meshgrid(range(n),range(n))
return np.sqrt((x-(n/2)+1)**2+(y-(n/2)+1)**2)
def function(d):
return np.log(d) # or any function you might have
d = centeredDistanceMatrix(101)
f = function(d)
plt.plot(np.arange(51),function(np.arange(51)))
plt.show()
plt.imshow(f.T,origin='lower',interpolation='nearest')
plt.show()
,结果是:
,并且:
任意数据编辑。
您可以使用interp1D
将矢量传递给函数以提供像素值。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
def centeredDistanceMatrix(n):
# make sure n is odd
x,y = np.meshgrid(range(n),range(n))
return np.sqrt((x-(n/2)+1)**2+(y-(n/2)+1)**2)
def function(d):
return np.log(d) # or any funciton you might have
def arbitraryfunction(d,y,n):
x = np.arange(n)
f = interp1d(x, y)
return f(d.flat).reshape(d.shape)
n = 101
d = centeredDistanceMatrix(n)
y = np.random.randint(0,100,n) # this can be your vector
f = arbitraryfunction(d,y,n)
plt.plot(np.arange(101),arbitraryfunction(np.arange(n),y,n))
plt.show()
plt.imshow(f.T,origin='lower',interpolation='nearest')
plt.show()
,结果如下:
,这个:
答案 1 :(得分:1)
如果该功能以' r'已知,您可以使用以下程序。
from pylab import*
x=linspace(-10,10,200)
y=linspace(-10,10,200)
xx,yy=meshgrid(x,y)
z=sin((xx**2.0+yy**2.0)**0.5)
imshow(z)
show()
在这个程序中,我绘制了函数f(r)= sin(r)的2D旋转。
由于meshgrid在x-y坐标中,而f是r'的函数,我们必须改变坐标系(从极坐标到笛卡儿坐标)
r= ((x**2 + y**2 ) **0.5)
所以f(r)= sin(r)变为
f(x,y)=sin( ((x**2 + y**2 ) **0.5) )
为了在一帧中绘制两个图形,可以将它们作为子图添加到主框架中。
from pylab import*
fig = figure()
sub1 = fig.add_subplot(121)
sub2 = fig.add_subplot(122)
r=linspace(0,10,200)
fr=sin(r)
sub1.plot(r,fr)
x=linspace(-10,10,200)
y=linspace(-10,10,200)
xx,yy=meshgrid(x,y)
z=sin((xx**2.0+yy**2.0)**0.5)
sub2.imshow(z)
sub1.set_title('1D')
sub2.set_title('2D')
show()
子图的大小可以通过“配置子图”手动调整。窗口底部的小部件。