无法用另一个相同大小的数组替换元组中的数组 - 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
表示您不需要该函数的结果。
我有一个元组列表:
我想用长度相同但用零填充的数组替换第一个元组的第二个 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
表示您不需要该函数的结果。