准备用python返回的矩阵有什么好处?

2024-06-16 09:36:01 发布

您现在位置:Python中文网/ 问答频道 /正文

这是《机器学习在行动》一书中的代码。source code

传递给dataSet的是一个m*3数组(datingTestSet2.txt,可以在上级目录中找到)你知道吗

我的问题是:

准备一个矩阵返回有什么好处?(保存内存?)你知道吗

如果我不准备矩阵,它会出错吗?(似乎不是。)

from numpy import *
def autoNorm(dataSet):
    minVals = dataSet.min(0)
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    normDataSet = zeros(shape(dataSet)) # prepare matrix to return(It's my own comment, not in the source code. )
    # Because there is a similar code before it, 
    # I think it should be the same meaning. Or any means else?
    m = dataSet.shape[0]
    normDataSet = dataSet - tile(minVals, (m,1))
    normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide
    return normDataSet, ranges, minVals

Tags: the代码机器sourcereturncodeit矩阵
2条回答

除了不需要初始化normDataSet之外,根本不需要它。您可以直接将array数据集点修改为,而不影响传入的array。你知道吗

一般来说,代码过于冗长和复杂,没有充分利用numpy。我不知道有一个内置函数可以将array重新规范化为numpy中的范围[0,1],但是在numpyarray上使用元素操作可以很容易地完成:

def autoNorm(dataSet):
    minVals = dataSet.min(0)
    ranges = dataSet.max(0) - minVals
    dataSet = (dataSet-minVals) / ranges
    return dataSet, ranges, minVals

没有优势。在您显示的代码中,对normDataSet的第一个赋值没有持久的效果,因为两行之后对normDataSet还有第二个赋值。此时,以前绑定到normDataSetzeros数组对象的引用计数达到零,旧数组立即被垃圾回收。(当然,这是假设CPython,但是在编写本文时,没有一个替代的Python实现对NumPy有完全的工作支持。)

我猜这是作者的一个简单(但相对无害)错误。我建议提交一个bug报告,这样它就可以被修复了。你知道吗

顺便说一下,术语nit:normDataSet是一个数组,而不是矩阵。这一点很重要,因为NumPy确实有一个matrix类型,它在乘法、除法和指数运算上的行为不同于普通的array。你知道吗

相关问题 更多 >