将列表复制到numpy数组的一部分

时间:2017-05-12 17:55:56

标签: python arrays numpy indexing

我有一个大小不一的列表,我想将它复制到一个numpy数组中。我已经有办法,但我想看看是否有更优雅的方式。

我们说我有以下内容:

import numpy as np
data = np.full((10,), np.nan)

# I want to copy my list into data starting at index 2
def apply_list(my_list):
    data[2:2+len(mylist)] = mylist

# Example
tmp = [1, 2, 3, 4]        # can vary from 2 to 8 elements
apply_list(tmp)

在此之后,我希望数据看起来像这样:

[nan, nan, 1, 2, 3, 4, nan, nan, nan, nan]

请注意len(mylist)的范围是2到8。

我使用NaN标记未使用的位置,并且数据已预先分配,并且无论my_list的大小如何,都应始终为size = 10。因此,简单地追加将无效。

我特别不喜欢2:2+len(mylist)。有没有更好/更清洁的方法呢?

1 个答案:

答案 0 :(得分:1)

我不知道任何可以简化这个的numpy函数。但是,您可以将其包装为函数,以便隐藏复杂性:

def put(arr, subarr, startidx):
    arr[startidx:startidx+len(subarr)] = subarr
    return arr

或使用顺序索引(不推荐):

def put(arr, subarr, startidx):
    arr[startidx:][:len(subarr)] = subarr
    return arr

您还可以使用mylist s:

填充NaN
np.pad(np.array(mylist, dtype=float), 
       (2, 8-len(mylist)), 
       mode='constant', 
       constant_values=np.nan)