【发布时间】:2018-08-22 15:23:10
【问题描述】:
我有一个数组,我需要检查它的行中是否有缺失值。第二列必须遵循一个序列,如果发现缺失值,我需要插入它。
[[123 1 0
123 2 0
123 4 0
123 5 0
123 8 0
123 9 0
...]]
在本例中,我需要在第 2 行插入值 [123 3 0],在第 4 行插入值[[123 6 0], [123 7 0]]。
我正在逐行迭代数组,检查是否有缺失的行,使用numpy.insert 来执行此操作,但每次插入完成时它都会返回一个副本,从而增加每次插入行的索引此操作完成的时间。
这是一个合理的方法吗?
【问题讨论】:
-
你能通过查看第一个值和最后一个值来推断缺少多少值吗?然后您可以创建一次完整大小的数组并按顺序填充它。
-
数组很大会有点难
-
正如@w-m 建议的那样,只查看第一个和最后一个值并使用
range以正确的大小构建该列。如果其他列中的数据发生变化,您将必须决定如何将这些列填充到您的“内插”位置。你能提供更多的上下文吗? -
在列表中插入多个项目时,一个常见的想法是从最大的索引开始并返回。这样你就不必为增长调整索引。但是适应增长并不难。这是一个简单的算术步骤。
-
如果使用
np.insert,最好先收集所有插入、位置和值,然后只调用一次insert。因为它每次调用都会创建一个新数组,所以在循环中重复调用它相对昂贵。