python - 用零填充 3D 列表中的缺失值以创建 3D numpy 数组
问题描述
我有一个 3D 列表ll
,可以是大小100 K * 10 * 3
ll = [
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10,11,12]], [[6, 7, 8],[12, 13, 14]], [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
]
我希望它是
ll = [[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10,11,12]], [[6, 7, 8],[12, 13, 14], [0, 0, 0], [0, 0, 0]], [[10, 20, 30], [40, 50, 60], [70, 80, 90], [0,0,0]]]
这样我就可以创建a1 = np.array(l1)
a1
array([
[[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
[[6,7,8], [12,13,14], [0,0,0], [0,0,0]]
[[10, 20, 30], [40, 50, 60], [70, 80, 90], [0,0,0]]
])
我已阅读以下内容,但它们是 2D 的,我无法为 3D 做。
解决方案
这是一种预先分配 NumPy 数组然后复制数据的方法。假设您实际上不需要扩展,这应该比在创建之前ll
附加 0-triples 使用更少的内存:ll
a1
a1 = np.zeros((len(ll), max([len(k) for k in ll]), 3))
for ctr,k in enumerate(ll):
a1[ctr,:len(k),:] = k
a1
array([[[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10., 11., 12.]],
[[ 6., 7., 8.],
[12., 13., 14.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[10., 20., 30.],
[40., 50., 60.],
[70., 80., 90.],
[ 0., 0., 0.]]])
max([len(k) for k in ll])
告诉我们 的任何成员中的最大三元组数ll
。我们分配一个 0 初始化的所需大小的 NumPy 数组。然后在循环中,智能索引告诉我们在哪里a1
复制ll
.
推荐阅读
- junit - 模拟 SqlRowSet
- java - Resilience4j.retry 异常不工作
- nginx - 带有反向代理的Nodejs
- asp.net - 显示数据库中保存为字节的 IFormFile 的图像
- scala - 函数与整数值比较时的火花
- python - 分组,然后比较列表类型行中的值以填充新列
- python-3.x - 如何提取多个关键字的每日 pytrends 数据并将它们保存到 .csv
- node.js - 无法连接到部署在 cpanel 中的 nodejs 应用程序上的 socket.io
- c# - Xamarin.Forms iOS 依赖服务中的触觉反馈崩溃
- sql - SQL - 尝试按每个位数据类型更改进行分组