【发布时间】:2016-12-20 23:49:10
【问题描述】:
让
a = np.array([[1, 2], [3, 4]])
a
array([[1, 2],
[3, 4]])
然后使用resize
b = np.resize(a, (3, 3))
b
array([[1, 2, 3],
[4, 1, 2],
[3, 4, 1]])
b 现在拥有来自a 的所有信息(如果顺序不正确)。有没有办法利用它在左上角创建一个看起来像 a 但现在有一个新列和一个新行的 np.nan?
c = np.empty(b.shape)
c.fill(np.nan)
c[:a.shape[0], :a.shape[1]] = a
c
array([[ 1., 2., nan],
[ 3., 4., nan],
[ nan, nan, nan]])
显然,上面的代码完成了同样的事情。我只是忍不住认为resize 可以以某种方式更有效地完成此任务。
【问题讨论】:
-
wonky order只是数据的重复副本(已展平)。c.resize用 0 填充,但再次按扁平顺序。resize的两种形式都没有得到太多使用。 -
你最后的代码不是低效的。它可能有点罗嗦,但它比
pad更有效,后者必须更通用。查看np.resize、np.full和np.pad的代码——这些都是用Python 编写的。