繁体   English   中英

如何将带有空 arrays 的 numpy arrays 列表转换为单个数组?

[英]How to convert a list of numpy arrays with empty arrays into a single array?

所以我的数据看起来像:

[array([0], dtype=int64),
 array([1], dtype=int64),
 array([1], dtype=int64),
 array([2], dtype=int64),
 array([3], dtype=int64),
 array([3], dtype=int64),
 array([4], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([6], dtype=int64) ...

虽然使用np.concatenate(list_1)确实连接了 arrays 但跳过了空的 arrays。 结果数组 6 是 4 的下一个元素,中间的空 arrays 没有出现在列表中。 这就是 np.concateneate 所做的,但我不希望这样。

我想将这些 arrays 组合成一个与列表具有相同长度但NaN值代替空 arrays 的数组。 我怎样才能做到这一点?

单程:

np.concatenate([a if a.size else np.array([np.nan]) for a in array_list])

尽管可能有更好的方法来加载您的数据,但我会冒险猜测。

作为旁注, concatenate不会跳过任何数组 - 它连接 arrays,也就是说,将每个元素一个接一个地放置。 放置 0 个元素并不明显。

您可以预先分配 output 并直接分配给它:

result = np.full(len(list_1), np.nan)
for i, v in enumerate(list_1):
    if v.size:
        result[i] = v.item()

或者,你可以做

result = np.empty(len(list_1))
for i, v in enumerate(list_1):
    result[i] = v.item() if v.size else np.nan

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM