我该如何计算这个?
假设我有一个这样的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进行以下计算。
- 取出第t行
- 计算第t行和整个数组的点积
- 计算总和
- 用(n-t)去除
- 把所有结果返回为一个数组
也就是说:
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