网上找了段代码:
# 加载数据
def loadDataSet(fileName): # 解析文件,按tab分割字段,得到一个浮点数字类型的矩阵
dataMat = [] # 文件的最后一个字段是类别标签
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = map(float, curLine) # 将每个元素转成float类型
dataMat.append(fltLine)
return dataMat
#...
# 构建聚簇中心,取k个(此例中为4)随机质心
def randCent(dataSet, k):
n = shape(dataSet)[1]
centroids = mat(zeros((k,n))) # 每个质心有n个坐标值,总共要k个质心
for j in range(n):
minJ = min(dataSet[:,j])
maxJ = max(dataSet[:,j])
rangeJ = float(maxJ - minJ)
centroids[:,j] = minJ + rangeJ * random.rand(k, 1)
return centroids
在python3.7下报错:
(ludwig.py37) e:\test\kmeans>python km0.py
Traceback (most recent call last):
File "km0.py", line 54, in <module>
File "km0.py", line 34, in kMeans
File "km0.py", line 25, in randCent
TypeError: unsupported operand type(s) for -: 'map' and 'map'
在python2.7下正常
在python3.7和python2.7下print了加载完的数据集dataMat中的一条数据,得到了不同的结果:
python3.7:
(ludwig.py37) e:\test\kmeans>python km.py
<map object at 0x000000001343A550>
python2.7:
(ocr.py27) e:\test\kmeans>python km0.py
[1.658985, 4.285136]
3.7返回的是map对象;2.7返回的是list对象;
感觉是map()函数在python版本下的差异导致,验证一下:
python3.7:
(ludwig.py37) e:\test\kmeans>python
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD6
4)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> map
<class 'map'>
python2.7:
(ocr.py27) e:\test\kmeans>python
Python 2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> map
<built-in function map>
印证猜测:
python2下map是一个build-in function; python3下map是一个class,map()返回的是一个map class对象;
修改代码将map返回的结果强制转一下list即可支持python2, python3:
# 加载数据
def loadDataSet(fileName): # 解析文件,按tab分割字段,得到一个浮点数字类型的矩阵
dataMat = [] # 文件的最后一个字段是类别标签
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = map(float, curLine) # 将每个元素转成float类型
fltLine = list(fltLine) #!!!!python3中 map返回的不是list是map类,形如<map at 0x3fed1d0>
dataMat.append(fltLine)
return dataMat
python2.7, python3.7下都可通过.
分享到:
相关推荐
例如,如果我们有一个列表`[1, 2, 3, 4, 5, 6, 7, 8, 9]`,想计算每个元素的平方,可以定义一个函数`f(x) = x * x`,然后使用`map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])`。这样,`map()`会返回一个新的列表`[1, 4, 9, 16...
《Python函数式编程(第2版)》是一本面向Python开发者深入探讨函数式编程的书籍。函数式编程是一种编程范式,它强调使用函数作为基本的构建块,以减少副作用和状态变化,从而提高代码的可读性和可维护性。Python虽...
在本文中,我们将深入探讨名为"wafer_map"的Python库,其版本为1.1.1,适用于Python 2环境,且不依赖特定的硬件架构。 wafer_map是一个针对半导体制造领域的Python库,它的主要功能可能与晶圆映射有关。在半导体...
### Map函数在Python中的应用详解 #### 一、Map函数简介 `map()`函数是Python内置的一个非常实用的功能,主要用于对序列(如列表)中的所有元素应用某个特定的函数,并返回一个迭代器,该迭代器生成经过处理的结果...
总之,理解Python 3中`map()`函数的行为差异是至关重要的,特别是当你从Python 2迁移到Python 3时。记住,当使用`map()`时,如果需要立即得到结果,记得使用`list()`将迭代器转换为列表。这样,你就可以充分利用`map...
在Python编程语言中,函数是组织良好、可重复使用的代码块,它们允许我们将复杂的问题分解为更小、更易于...通过练习文件`day2-python3函数练习.ipynb`和`day2-课后作业答案.ipynb`,你可以进一步巩固和提升这些技能。
3. **Map文件**:Map文件(Memory Allocation Map)通常是在编译过程中生成的,它包含了程序中各个变量和函数在内存中的分配情况。在嵌入式系统中,Map文件对于理解程序的内存布局和调试至关重要。在本场景下,Map...
Python中的`map()`函数是一个内置的高阶函数,它的主要作用是将一个函数应用到一个或多个可迭代对象(如列表、元组等)的每一个元素上,返回一个新的可迭代对象,该对象包含的是经过函数处理后的结果。通过`map()`...
Python中的`map()`函数是一个内置的高阶函数,它的主要作用是将一个可迭代对象(如列表、元组等)中的每个元素都作为参数传递给指定的函数,并返回一个新的可迭代对象,其中包含了函数处理后的结果。这个过程被称为...
map 函数是 Python 中的一个内置函数,用于将列表里的每一项数据都执行相同的操作。我们可以使用 map 函数来对列表里的元素进行处理,例如,计算每个学生的平均分。 8. reduce 函数 reduce 函数是 Python 中的一个...
举例来说,如果我们有一个函数f(x)=x^2,即将元素x进行平方运算,我们希望对列表[1,2,3,4,5,6,7,8,9]中的每个元素都执行这个平方运算,那么可以使用map函数来实现这一过程。具体代码如下: ```python def f(x): ...
Python中的`map`函数是一个内置的高阶函数,它的主要作用是将一个函数应用到一个或多个可迭代对象(如列表、元组等)的每个元素上,返回一个新的可迭代对象,该对象包含的是经过函数处理后的结果。理解并熟练使用`...
`map()` 是 Python 内置的高阶函数之一,用于将指定的函数应用于序列中的每一个元素,从而生成一个新的序列。这对于批量处理数据非常有用。 **语法:** ```python map(function, iterable, ...) ``` - `function`...
2. 导入:安装完成后,可以在Python脚本中通过`import lizard_map`(假设库的主模块名为lizard_map)来使用该库。 3. 学习和使用:查看库提供的API文档,了解其主要功能和用法。这通常包括函数、类、方法等,以及...
2. 函数式构造:Python允许使用lambda表达式创建匿名函数,这种简洁的语法受到LISP的启发。lambda函数通常用于临时定义短小的、一次性使用的函数。 ```python # 使用lambda表达式定义一个加法函数 add = lambda x, ...
`map()`函数是Python中的一个高阶函数,它接受一个函数和一个或多个可迭代对象(如列表、元组等)作为参数,然后返回一个新的迭代器,该迭代器生成的结果是将函数依次作用于可迭代对象的所有元素后的结果。...
在Python 2中,`map()`函数返回一个列表,即所有结果被立即计算并存储。而在Python 3中,为了支持惰性计算,`map()`返回一个`map`对象,它是一个可迭代对象,但不会立即计算所有结果,而是按需计算。若需要将`map`...
Python3支持函数式编程风格,包括高阶函数、闭包和装饰器。高阶函数如`map()`、`filter()`和`reduce()`可以简化代码并提高可读性。闭包则允许函数访问并操作外部作用域的变量,而装饰器在不修改原有函数代码的情况下...