a = [[1,2],[3,4]]
pca( map(lambda v: v, a))
我需要将各个嵌套列表逐个传递给此函数。但我只得到了整个清单。不是嵌入式列表。我在这里缺少什么明显的技术?
更新(我能够根据评论解决这个问题):
此代码使用Spark的Python库及其自己的数据结构,我使用Python的库移植它。我错误地尝试使用它而不理解Python的 map 的语法,它可以将 pca 作为第一个参数,将嵌套列表作为第二个参数。它让我感到懊恼,因为我不熟悉Python。
流程从这条线开始,这是问题所在。我也修改了其余的代码。
componentsScaled, scaledScores, eigenvaluesScaled = pca( scaledData.map(lambda (k, v): v),3)
def estimateCovariance( data ):
mean = getmean( data )
dataZeroMean = data.map(lambda x : x - mean )
cov = dataZeroMean.map(lambda x : np.outer(x,x)).mean()
return cov
"""Computes the top `k` principal components, corresponding scores, and all eigenvalues.
"""
def pca(data, k=2):
eigVals, eigVecs = eigh(estimateCovariance(data))
inds = np.argsort(eigVals)[::-1]
topComponent = eigVecs[:,inds[:k]]
correlatedDataScores = data.map(lambda x : np.dot(x,topComponent))
return topComponent,correlatedDataScores,eigVals[inds]
答案 0 :(得分:1)
如果你想做这样的事,
a = [[1,2], [3,4]]
what_you_want = [pca([1,2]), pca([3,4])]
您应该将pca
传递给map
而不是lambda
。 map
alrady做了你想做的事情lambda
- 它将传递给它的函数(pca
)应用于列表a
的每个元素。
what_you_want = map(pca, a)