我该如何计算这个?

-2 投票
1 回答
103 浏览
提问于 2025-04-14 16:47

假设我有一个这样的numpy数组:

import numpy as np

my_data = np.array(
[[1, 1, 1],
 [2, 2, 2],
 [3, 3, 3],
 [4, 4, 4],
 [5, 5, 5]])

# obtain the length
n = len(my_data) # 5

我想对t=0, 1, 2, 3, 4进行以下计算。

  1. 取出第t行
  2. 计算第t行和整个数组的点积
  3. 计算总和
  4. 用(n-t)去除
  5. 把所有结果返回为一个数组

也就是说:

t = 0
v0 = my_data[t:,]
my_data_dot = np.dot(my_data, v0)
my_data_sum = np.sum(my_data_dot)/(n-t)

我该如何在不使用循环的情况下完成这个?

请给我展示最简单的方法。

1 个回答

1

你可以使用矩阵乘法和 np.arange 来实现:

>>> t_values = np.arange(0, 5)
>>> result = ((my_data @ my_data.T) / (n - t_values)).sum(axis=0)
>>> result
array([  9. ,  22.5,  45. ,  90. , 225. ])

原始代码测试(包含修正和循环):

my_data = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 5]])
n = len(my_data)
for t in range(5):
    v = my_data[t, :] # t-th row
    my_data_dot = np.dot(my_data, v)
    my_data_sum = np.sum(my_data_dot)/(n - t)
    print(my_data_sum)

输出结果:

9.0
22.5
45.0
90.0
225.0

撰写回答