Python 用最后一个元素填充嵌套列表中缺少的值

Python 用最后一个元素填充嵌套列表中缺少的值,python,numpy,Python,Numpy,我有一个图像的numpy数组,但它不完整,它看起来像这样: [ [255,255,255], [128], [34,4], [44] ] 我想将特定元素的前一个值添加到该元素中,如下所示: [ [255,255,255], [128,128,128], [34,4,4], [44,44,44] ] 那么,如何向特定元素添加值呢? 关键是,我需要每个元素块完成它的自我我制定了一个快速解决方案,可以满足您的要求: A = np.array([[255,255,255],

我有一个图像的numpy数组,但它不完整,它看起来像这样:

[
[255,255,255],
[128],
[34,4],
[44]
]
我想将特定元素的前一个值添加到该元素中,如下所示:

[
[255,255,255],
[128,128,128],
[34,4,4],
[44,44,44]
]
那么,如何向特定元素添加值呢?
关键是,我需要每个元素块完成它的自我

我制定了一个快速解决方案,可以满足您的要求:

A = np.array([[255,255,255],
              [128],
              [34,4],
              [44]])

# lenA can be changed depending on the preferred dimensions
lenA = len(A) - 1 
np.array([b if len(b) == lenA else b + [b[-1]]*(lenA - len(b)) for b in A])

让我知道这是否足够,或者您可以分享更多详细信息。

我制定了一个快速解决方案,可以满足您的要求:

A = np.array([[255,255,255],
              [128],
              [34,4],
              [44]])

# lenA can be changed depending on the preferred dimensions
lenA = len(A) - 1 
np.array([b if len(b) == lenA else b + [b[-1]]*(lenA - len(b)) for b in A])
让我知道这是否足够,或者您可以分享更多详细信息。

方法1

这是一个基于-

方法2

另一个是基于itertools的-

方法3

另一个数据帧假设输入中没有NAN-

import pandas as pd

def fill_by_last_val_v3(a):
    df = pd.DataFrame(a)
    m = df.isnull()
    last_ele = np.array([a_i[-1] for a_i in a])
    return np.where(m,last_ele[:,None],df)
方法4

又是熊猫的最简单的一次-

不过,您可能希望进行数据类型转换,以获得pandas解决方案的原始数据类型。

方法1

这是一个基于-

方法2

另一个是基于itertools的-

方法3

另一个数据帧假设输入中没有NAN-

import pandas as pd

def fill_by_last_val_v3(a):
    df = pd.DataFrame(a)
    m = df.isnull()
    last_ele = np.array([a_i[-1] for a_i in a])
    return np.where(m,last_ele[:,None],df)
方法4

又是熊猫的最简单的一次-


您可能需要进行数据类型转换,以获得pandas解决方案的原始数据类型。

注意:您的预期输出为4*3,因此不完全是n*n…Adam.Er8是的,我没有回答这个问题。谢谢你发布的解决方案对你有用吗?如果有人,请考虑接受。更多信息-注意:您的预期输出是4*3,因此不完全是n*n…Adam.Er8是的,我没有回答这个问题。谢谢你发布的解决方案对你有用吗?如果有人,请考虑接受。更多信息-我尝试你的答案,我得到了比预期更多的价值。可能是add lenA=lenA-1。是的,它起作用了,但我没有回答这个问题,我不想要数组n*n,我只希望元素是相同的固定长度,例如3。多谢各位much@jtitusj请在你的反对票上留下一些反馈。如果你有一些建设性的批评,这将是有益的,这样作者可以改进。我尝试你的答案,我得到了比预期更多的价值。可能是add lenA=lenA-1。是的,它起作用了,但我没有回答这个问题,我不想要数组n*n,我只希望元素是相同的固定长度,例如3。多谢各位much@jtitusj请在你的反对票上留下一些反馈。如果你有一些建设性的批评,这将是有益的,这样作者就可以改进。
In [168]: a
Out[168]: [[255, 255, 255, 5], [128, 5, 6], [34, 0, 7], [nan, 44]]

In [169]: pd.DataFrame(a).ffill(axis=1).to_numpy()
Out[169]: 
array([[255., 255., 255.,   5.],
       [128.,   5.,   6.,   6.],
       [ 34.,   0.,   7.,   7.],
       [ nan,  44.,  44.,  44.]])