我正在尝试创建一个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]])
这些数组中的值将是上面代码中余弦内的基值的乘积。