python - * 不支持的操作数类型:“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()
解决方案
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)
推荐阅读
- angular - 如何在 Angular 9 中进行同步调用?| 地理位置
- python - 在另一个函数中运行函数
- javascript - JavaScript 中 for...await 循环的同步性
- matlab - MATLAB 绘图函数没有足够的输入参数
- javascript - 如何使用 javascript 从 Web 中的 Firebase 检索数据?
- javascript - 重新布线不导入本地目录
- flutter - 如何在 Flutter 上优雅地在我自己的类中实现 Shared_preferences?
- apache2 - Apache2:如何记录被拒绝的连接和客户端超时
- amazon-web-services - 查找最新的 AWS API 版本以锁定版本
- c - #包括
导致错误