【问题标题】:Creating a numpy array in Python containing cosines在 Python 中创建一个包含余弦的 numpy 数组
【发布时间】:2013-01-21 03:24:02
【问题描述】:

我正在尝试创建一个 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.]]

【问题讨论】:

  • 我希望 k 从 1 到 m*steps 变化,但这很容易解决

标签: multidimensional-array numpy python-2.7


【解决方案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]])

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

【讨论】:

  • 这似乎重塑了 cos(v_t) 数组。
  • @DanielBlay 它确实重塑了cos(v_t) 数组,但从更长的v_t 数组开始,以实现我认为您所追求的。如果不是,我建议你重写你的问题,给出m_psi[i, j] 的数学表达式,因为我们很难弄清楚你在追求什么。
  • 我已经稍微编辑了这个问题。很抱歉,我很难澄清 - 我已经编写了 3 周的代码,我的主管要求我按照这些思路编写程序,但他的示例代码不起作用。我真正知道的是,我正在尝试对连续信号(余弦之和)做一些事情,并且该过程的一部分涉及将信号向量乘以随机矩阵 R 和矩阵 psi,这是余弦基矩阵(即具有元素 cos(t) 到 cos(nt)) 的矩阵。
  • 他提供给我的代码是; v_t = np.linspace(0, tmax, tsteps) \n m_psi=np.array([tsteps,m]) \n for j in range(m): \n m_psi[:,np.cos(v_t*m* 2*pi/T] \n
  • 嗯,这肯定有效,因为它不会返回错误。我不认为这是我的主管想要的(他说矩阵应该是正交的,但事实并非如此),但显然我也不知道他想要什么,所以我认为这尽可能接近答案得到。
猜你喜欢
  • 2017-06-13
  • 2019-02-01
  • 2021-07-23
  • 2021-12-23
  • 1970-01-01
  • 2020-02-12
  • 2010-11-25
  • 1970-01-01
  • 2016-07-15
相关资源
最近更新 更多