首页 > 解决方案 > * 不支持的操作数类型:“map”和“float”

问题描述

我正在一个 python3 实验室工作,该实验室需要我编写一个生成数据点的 python 代码。每条线还需要至少有 200 个不同的点。使用像 10000 这样的大小。

但是,我不断收到一条错误消息,指出“*: 'map' and 'float' 的操作数类型不受支持”是由下面带下划线的代码部分引起的。我知道 numpy 不适用于 python3 上的 map() 并且我必须将“total_steps”更改为列表,但我无法找到有效的解决方案。

#!/usr/local/python3

import random
import matplotlib.pyplot as plt
import numpy as np
from decimal import Decimal

def partition(arr, low, high): 
    i = (low-1)   
    pivot = arr[high] 
  
    for j in range(low, high): 
        if arr[j] <= pivot: 
            i = i+1
            arr[i], arr[j] = arr[j], arr[i] 
  
    arr[i+1], arr[high] = arr[high], arr[i+1] 
    return (i+1) 
  
def quickSort(arr, low, high, step): 
    if len(arr) == 1: 
        return step
    if low < high: 
        pi = partition(arr, low, high) 
  
        step += quickSort(arr, low, pi-1, step)
        step += quickSort(arr, pi+1, high, step)
        step += 1
    
    return step

def gen(size):
    return [random.randrange(10000) for i in range(size)]

def to_decimal(l):
    return [Decimal(i) for i in l]


sizes = sorted(random.sample(range(200, 10001), 20))
print(sizes)
total_steps = []
for size in sizes:
    datapoints = gen(size)
    total_steps.append(quickSort(datapoints, 0, size-1, 0))

print(total_steps)
fig = plt.figure()
ax = plt.axes()

sizes = np.array(sizes)/10000

total_steps = np.array(map(Decimal,total_steps))*0.00001
--------------------------------------------------------


plt.plot(sizes, to_decimal(total_steps))
plt.show()

标签: pythonpython-3.xnumpy

解决方案


map返回一个地图对象。您收到此错误是因为您试图将包含单个地图对象的数组乘以浮点数。

您应该将其强制为列表,以便使用兼容类型创建数组:

total_steps = np.array(list(map(Decimal,total_steps))) * Decimal(0.00001)

或者,您可以使用np.fromiter

total_steps = np.fromiter(map(Decimal,total_steps), float) * Decimal(0.00001)

推荐阅读