【发布时间】:2015-07-29 10:44:37
【问题描述】:
我有一段代码可以分割二维 NumPy 数组并返回结果(子)数组。在某些情况下,切片仅索引一个元素,在这种情况下,结果是一个元素数组:
>>> sub_array = orig_array[indices_h, indices_w]
>>> sub_array.shape
(1,)
我怎样才能以一般的方式强制这个数组是二维的?即:
>>> sub_array.shape
(1,1)
我知道sub_array.reshape(1,1) 有效,但我希望能够将它应用到sub_array,一般不用担心其中的元素数量。换句话说,我想编写一个(轻量级)操作,将 shape-(1,) 数组转换为 shape-(1,1) 数组,将 shape-(2,2) 数组转换为一个形状(2,2)数组等。我可以做一个函数:
def twodimensionalise(input_array):
if input_array.shape == (1,):
return input_array.reshape(1,1)
else:
return input_array
这是我能得到的最好的,还是 NumPy 有更“原生”的东西?
加法:
正如https://stackoverflow.com/a/31698471/865169 中指出的那样,我做错了索引。我真的很想做:
sub_array = orig_array[indices_h][:, indices_w]
当indices_h 中只有一个条目时,这不起作用,但是将它与另一个答案中建议的np.atleast_2d 结合起来,我得出:
sub_array = np.atleast_2d(orig_array[indices_h])[:, indices_w]
【问题讨论】:
-
您的函数是
atleast_2d的简单版本,就像'native'。看看它的代码。 -
@hpaulj 是的,所以我在阅读stackoverflow.com/a/31698359/865169后想通了
-
完整的
atleast_2d代码已列出stackoverflow.com/a/31550687/901925