我有一个大小不一的列表,我想将它复制到一个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)
。有没有更好/更清洁的方法呢?
答案 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)