2

我正在尝试创建一个 nxm numpy 数组,该数组由一组余弦(如 cos(v_t)、cos(2 * v_t)、cos(3 * 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是另一个二维数组,这个乘法的结果也必须是一个矩阵)。

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

[[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.]]
4

1 回答 1

1

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

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)

您可以使用广播而不是循环以更优雅和 numpythonic 的方式实现完全相同的事情:

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]])

并且这些数组中的值将乘以上面代码中余弦内的基值。

于 2013-02-06T04:20:59.627 回答