gpt4 book ai didi

python:遍历并行嵌套列表中的每个项目

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:47 25 4
gpt4 key购买 nike

我有以下各种 numpy 数组的列表:

nparrays_list = [
array([1, 2, 3, 4])
array([5, 6, 7, 8]),
array([9, 10, 11, 12])
]

我想遍历整个列表而不影响列表的形状(即我不想展平列表)以获得以下 numpy 数组列表:

nparrays_list_Decimal = [
array([Decimal('1'), Decimal('2'), Decimal('3'), Decimal('4')])
array([Decimal('5'), Decimal('6'), Decimal('7'), Decimal('8')]),
array([Decimal('9'), Decimal('10'), Decimal('11'), Decimal('12')])
]

这是我目前的代码:

import numpy as np

nparrays_list_Decimal = []
for nparray in nparrays_list:
nparray_Decimal = np.array([D(str(item)) for item in nparray])
nparrays_list_Decimal.append(nparray_Decimal)

我的问题是我要处理大量数据,因此创建新列表并不理想(即浪费内存)。是否有一种简单的方法来遍历原始列表中的每个项目,即使这些项目位于嵌套列表(或本例中的 numpy 数组)中?

最佳答案

由于您将在 Numpy 数组中拥有不同的对象类型,因此您需要创建新数组(除非它们是 dtype=object 的数组)

这是一个演示,说明您不能在 Numpy 数组中使用混合类型:

>>> arr=np.array([1,2,3])
>>> arr
array([1, 2, 3])
>>> arr[1]="string"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for long() with base 10: 'string'

Decimal 类型分配给 int 数组不会将该元素更改为数组中的 decimal 类型; arr[1] 被转换为 Decimal,但随后又无声地转换回 int:

>>> arr
array([1, 2, 3])
>>> arr[1]=Decimal(arr[1])
>>> arr
array([1, 2, 3])
>>> type(arr[1])
<type 'numpy.int64'>

你可以这样做:

>>> nparrays_list_Decimal=[np.array([Decimal(e) for e in arr]) for arr in nparrays_list]
>>> nparrays_list_Decimal
[array([Decimal('1'), Decimal('2'), Decimal('3'), Decimal('4')], dtype=object), array([Decimal('5'), Decimal('6'), Decimal('7'), Decimal('8')], dtype=object), array([Decimal('9'), Decimal('10'), Decimal('11'), Decimal('12')], dtype=object)]

或者,只使用列表的列表:

>>> LoL=[[Decimal(e) for e in arr] for arr in nparrays_list]
>>> LoL
[[Decimal('1'), Decimal('2'), Decimal('3'), Decimal('4')], [Decimal('5'), Decimal('6'), Decimal('7'), Decimal('8')], [Decimal('9'), Decimal('10'), Decimal('11'), Decimal('12')]]

如果内存是您关心的问题,(通常您不需要为适度的数组担心太多)您可以通过在转换子数组时删除子数组来进行内存效率更高的转换:

from collections import deque 

nparrays_list=deque(LoA) # the List of Arrays is garbage collected..
nparrays_list_Decimal=[]
while nparrays_list:
# each sublist is garbage collected after being popped and iterated
nparrays_list_Decimal.append(np.array([Decimal(e) for e in nparrays_list.popleft()]))

>>> nparrays_list_Decimal
[array([Decimal('1'), Decimal('2'), Decimal('3'), Decimal('4')], dtype=object), array([Decimal('5'), Decimal('6'), Decimal('7'), Decimal('8')], dtype=object), array([Decimal('9'), Decimal('10'), Decimal('11'), Decimal('12')], dtype=object)]

关于python:遍历并行嵌套列表中的每个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41620289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com