我可以通过以下方式创建一个由0到30的100个均匀间隔数的数组 -
theta = linspace(0,30,100)
是否有可能得到一个从0到30的100个数字的数组,这个数字不是均匀间隔的,而是由它们的正弦函数加权?
说明:这是一张图片,可以让您对我想要的内容有一个模糊的想法。我定义的theta
,均匀地选择点(如第一张图片)。我希望用正弦函数对数组进行加权。随着数字从0增加到30,它们的正弦值(值)增加,所以在我的数组中我想更频繁地选择更高的数字(如第二张图片) -
答案 0 :(得分:3)
我想我已经找到了解决方案。它采用原始线性间隔的数组并取其sine
,然后返回缩放的正弦值,使其与线性数组具有相同的结束。
import numpy as np
import matplotlib.pyplot as plt
def sinespace(m=90, n=10):
x = np.linspace(0, m, n)
s = np.sin(np.deg2rad(x))
return (s/s[-1])*m
s = sinespace()
print(s)
plt.plot(s, np.ones_like(s), 'ro')
plt.show()
请注意,对于最大值30,间距非常类似于线性间距。这是因为theta
与小sin(theta)
的{{1}}呈线性关系(当theta
为弧度时,theta
)。为了显示“salspacing”,我将其绘制到90度以使其更加明显。
答案 1 :(得分:1)
我不清楚你是否需要更具体的东西,但你可以通过从linspace开始创建任意数组。为了你的罪恶"罪恶"试试这个:
theta = np.sin(np.linspace(0,np.pi/6,100)) * 30 / np.sin(np.pi/6)