在Python中创建一个包含余弦的numpy数组



我正在尝试创建一个n x m numpy数组,该数组由一组余弦填充,如cos(v_t)、cos(2*v_t。。。,我试着用以下内容来做;

v_t = np.linspace(0,tmax,tsteps)
m_psi = np.zeros([tsteps,m])
for i in xrange(m):
  for j in xrange(tsteps):
    m_psi[j,i] = np.cos(v_t * k * 2 * pi/T)
    k += 1

但这会返回错误

ValueError: setting an array element with a sequence.

我需要数组的每个元素都是这些余弦中的一个,而不是数组的一行或一列是余弦(因为我要执行某种运算,比如np.dot(R,m_psi),其中R是另一个2D数组,这个乘法的结果也必须是矩阵)。

编辑:为了澄清,我正在寻找类似的东西

[[cos(v_t),     cos(2*v_t),   ...,cos(m*v_t)],
[cos((m+1)*v_t),cos((m+2)*v_t,...,cos(2*m*t)],
[etc.]]

EDIT根据您下面的评论,此非工作代码:

v_t = np.linspace(0, tmax, tsteps)
m_psi = np.array([tsteps,m])
for j in range(m):
    m_psi[:,np.cos(v_t*m*2*pi/T)]

可以翻译成工作numpy为:

v_t = np.linspace(0, tmax, tsteps)
m_psi = np.empty((tsteps, m))
for j in xrange(m) :
    m_psi[:, m] = np.cos(v_t * m * 2 * np.pi / T)

你可以使用广播而不是循环,以一种更优雅、更愚蠢的方式实现完全相同的事情:

v_t = np.linspace(0, tmax, tsteps)
m_psi = np.cos(v_t[:, None] * np.arange(m)[None, :] * 2 * np.pi / T)  

你必须弄清楚一些细节,但像这样的东西可能是你想要的:

v_t = np.linspace(0, m * tmax, m * tsteps)
m_psi = np.cos(v_t * 2 * np.pi / T).reshape(tsteps, m)

如果我们去掉余弦部分:

>>> m = 4
>>> tsteps = 5
>>> np.arange(m * tsteps).reshape(tsteps, m)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])

这些数组中的值将是上面代码中余弦内的基值的乘积。

相关内容

  • 没有找到相关文章