【发布时间】:2020-09-17 02:17:01
【问题描述】:
假设我有一个矩阵
import numpy as np
from functools import reduce
np.random.seed(123)
X = np.random.normal(size=(5, 2))
我想在不使用 numpy 函数和使用 map、reduce 和 lambda 函数的情况下计算 X^t X。由于我们可以将 X^t X 写成外积的总和,我的目标是:
def outer_product(x):
"""Computes outer product of a vector with itself"""
pass
map(outer_product, X)
但是我似乎无法找到一种有效的方法来使用 map reduce 编写所有这些内容。
我的尝试
def outer(x):
xxx = np.repeat(x, len(x))
yyy = np.array(list(x) * len(x))
return np.reshape(list(map(lambda x, y: x*y, xxx, yyy)), (len(x), len(x)))
这样
outer(X[0, ])
然后我写了协方差矩阵如下
def cov(X):
return np.array(reduce(lambda x, y: x + y, list(map(outer, X)))) / np.size(X, 0)
【问题讨论】:
-
你能找到一种低效的方法,你可以在之后进行优化吗?
-
是的,但它严重太可怕了。我来发一下
-
其实我不确定它现在是否有效
-
@ScottHunter 我已经添加了!
-
这只是一个编程练习,还是你真的需要比
numpy更高效的东西?很清楚您要避免使用哪些numpy功能,可以使用哪些功能。map和reduce是 Python 级别的迭代器,最好与 Python 列表一起使用。数组迭代效率较低。
标签: python numpy functional-programming mapreduce