无法用另一个相同大小的数组替换元组中的数组 - Python

Can't replace an array inside a tuple with another array of same size - Python

我有一个元组列表:

我想用长度相同但用零填充的数组替换第一个元组的第二个 np.array:

我试过以下方法:

Coeff[0][1] =np.zeros(len(Coeff[0][1]))

但我得到了:

'tuple' object does not support item assignment

知道如何完成替换过程吗?

元组在 Python 中是不可变的,您不能更改存储在其中的值。

您可以 list(map(list, list_of_tuples)) 快速转换为列表,或者 [list(x) for x in list_of_tuples] 如果您想使用列表理解。

我在我的计算机上做了一些丑陋的 %timeit 基准测试,两者的速度似乎相当。

如果您不需要保留数组中的原始值,则可以使用 numpy.nan_to_num()copy=False 就地修改元组中的第二个数组。这具有不创建新数组的优点。

以下示例将 Coeff 中每个元组的第二个数组替换为零。

import numpy as np

Coeff = [
    tuple(np.full((5, ), np.nan) for i in range(2))
    for j in range(5)
]
print(Coeff)

nil = [np.nan_to_num(tup[1], copy=False) for tup in Coeff]
print(Coeff)

输出为

[
    (array([nan, nan, nan, nan, nan]), array([nan, nan, nan, nan, nan])),
    (array([nan, nan, nan, nan, nan]), array([nan, nan, nan, nan, nan])),
    (array([nan, nan, nan, nan, nan]), array([nan, nan, nan, nan, nan])),
    (array([nan, nan, nan, nan, nan]), array([nan, nan, nan, nan, nan])), 
    (array([nan, nan, nan, nan, nan]), array([nan, nan, nan, nan, nan]))
]
[
    (array([nan, nan, nan, nan, nan]), array([0., 0., 0., 0., 0.])),
    (array([nan, nan, nan, nan, nan]), array([0., 0., 0., 0., 0.])),
    (array([nan, nan, nan, nan, nan]), array([0., 0., 0., 0., 0.])),
    (array([nan, nan, nan, nan, nan]), array([0., 0., 0., 0., 0.])),
    (array([nan, nan, nan, nan, nan]), array([0., 0., 0., 0., 0.]))
]

如果你只需要第一个元组,你可以使用nil = np.nan_to_num(Coeff[0][1], copy=False)。请注意,我使用 nil 表示您不需要该函数的结果。