我有一个numpy数组signal
,我试图计算以下值:
C = (signal[t_begin:t_end + 1] * (np.arange(t_end - t_begin + 1) + 1)).sum()
对于所有对t_begin
,t_end
,使得0〈= t_begin
〈= t_end
〈len(signal)
,而不使用for
循环。
我尝试生成所有可能的t_begin
,t_end
对,并以以下方式将它们用作signal中的索引:
t_begin_indices, t_end_indices = np.meshgrid(np.arange(2, n + 1), np.arange(2, n + 1), indexing='ij')
s = t_end_indices - t_begin_indices + 1
valid_mask = s > 0
s_valid = s[valid_mask]
C = signal[t_begin_indices[valid_mask]:t_end_indices[valid_mask]+1] * ((np.arange(s_valid) + 1)[:, np.newaxis])
但我得到了以下错误:TypeError: only integer scalar arrays can be converted to a scalar index
1条答案
按热度按时间lsmd5eda1#
在文档中使用np.add. reduce:https://numpy.org/doc/stable/reference/generated/numpy.ufunc.reduceat.html
我之所以建议这样做,是因为你遇到的t_开始_indices和t_end_indices都是二维数组,但是切片操作信号[t_begin_indices[valid_mask]:t_end_indices[valid_mask]+1]期望的是一个一维的索引数组,而np.add. reduce有助于以向量化的方式执行求和。
请尝试以下操作: