Python:创建一个数组,由正弦函数加权

时间:2015-03-16 16:24:55

标签: python arrays numpy

我可以通过以下方式创建一个由0到30的100个均匀间隔数的数组 -

theta = linspace(0,30,100)

是否有可能得到一个从0到30的100个数字的数组,这个数字不是均匀间隔的,而是由它们的正弦函数加权?

说明:这是一张图片,可以让您对我想要的内容有一个模糊的想法。我定义的theta,均匀地选择点(如第一张图片)。我希望用正弦函数对数组进行加权。随着数字从0增加到30,它们的正弦值(值)增加,所以在我的数组中我想更频繁地选择更高的数字(如第二张图片) -

enter image description here

2 个答案:

答案 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度以使其更加明显。

enter image description here

答案 1 :(得分:1)

我不清楚你是否需要更具体的东西,但你可以通过从linspace开始创建任意数组。为了你的罪恶"罪恶"试试这个:

theta = np.sin(np.linspace(0,np.pi/6,100)) * 30 / np.sin(np.pi/6)