2024-04-25 13:32:17 发布
网友
我有一个float数字的列表,我想把它转换成numpy array,这样我就可以使用numpy.where()来获取大于0.0(不是零)的元素的索引
float
numpy array
numpy.where()
我试过了,但运气不好:
import numpy as np arr = np.asarray(enumerate(grade_list)) g_indices = np.where(arr[1] > 0)[0]
编辑:
需要dtype=float吗?你知道吗
dtype=float
您不需要enumerate():
enumerate()
arr = np.asarray(grade_list) g_indices = np.where(arr > 0)[0]
过滤列表不需要numpy数组。你知道吗
List comprehensions是一个非常强大的工具,可以编写可读且简短的代码:
grade_list = [1, 2, 3, 4, 4, 5, 4, 3, 1, 6, 0, -1, 6, 3] indices = [index for index, grade in enumerate(grade_list) if grade > 0.0] print(indices)
给出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13]。这是一个标准的Python列表。如有必要,此列表可以在以后转换为numpy数组。你知道吗
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13]
如果您真的想使用^{},您应该跳过enumerate:
enumerate
import numpy grade_list = [1, 2, 3, 4, 4, 5, 4, 3, 1, 6, 0, -1, 6, 3] grade_list_np = numpy.array(grade_list) indices = numpy.where(grade_list_np > 0.0)[0] print(indices)
给出[ 0 1 2 3 4 5 6 7 8 9 12 13]。你知道吗
[ 0 1 2 3 4 5 6 7 8 9 12 13]
如果你只需要一个小的列表(例如<;100),列表理解是最快的方法。使用numpys where比先使用列表理解然后将其转换为numpy数组(列表长度为1000)快得多:
numpy.where (|L| = 1000): 13.5045940876 list_comprehension_np (|L| = 1000): 27.2982738018 list_comprehension (|L| = 1000): 15.2280910015
这些结果是使用以下脚本创建的:
#! /usr/bin/env python # -*- coding: utf-8 -*- import random import timeit import numpy def filtered_list_comprehension(grade_list): return [index for index, grade in enumerate(grade_list) if grade > 0.3] def filtered_list_comprehension_np(grade_list): return numpy.array([index for index, grade in enumerate(grade_list) if grade > 0.3]) def filtered_numpy(grade_list): grade_list_np = numpy.array(grade_list) return numpy.where(grade_list_np > 0.3)[0] list_elements = 10000 grade_list = [random.random() for i in range(list_elements)] res = timeit.timeit('filtered_numpy(grade_list)', number=100000, setup="from __main__ import grade_list, filtered_numpy") print("numpy.where (|L| = %i): %s" % (list_elements, str(res))) res = timeit.timeit('filtered_list_comprehension_np(grade_list)', number=100000, setup="from __main__ import grade_list, filtered_list_comprehension_np") print("list_comprehension_np (|L| = %i): %s" % (list_elements, str(res))) res = timeit.timeit('filtered_list_comprehension(grade_list)', number=100000, setup="from __main__ import grade_list, filtered_list_comprehension") print("list_comprehension (|L| = %i): %s" % (list_elements, str(res)))
你太复杂了:
import numpy as np grade_list_as_array = np.array(grade_list)
您不需要
enumerate()
:过滤列表不需要numpy数组。你知道吗
列表理解
List comprehensions是一个非常强大的工具,可以编写可读且简短的代码:
给出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13]
。这是一个标准的Python列表。如有必要,此列表可以在以后转换为numpy数组。你知道吗努比
如果您真的想使用^{} ,您应该跳过
enumerate
:给出
[ 0 1 2 3 4 5 6 7 8 9 12 13]
。你知道吗性能比较
如果你只需要一个小的列表(例如<;100),列表理解是最快的方法。使用numpys where比先使用列表理解然后将其转换为numpy数组(列表长度为1000)快得多:
这些结果是使用以下脚本创建的:
你太复杂了:
相关问题 更多 >
编程相关推荐