python | 您所在的位置:网站首页 › numpy二维切片 › python |
我有一段代码切片2D 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)数组,将形状(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]最佳答案: 2 个答案:答案 0 :(得分:10) 听起来你可能正在寻找atleast_2d。此函数将1D数组的视图作为2D数组返回: >>> arr1 = np.array([1.7]) # shape (1,) >>> np.atleast_2d(arr1) array([[ 1.7]]) >>> _.shape (1, 1)已经2D(或具有更多尺寸)的阵列不变: >>> arr2 = np.arange(4).reshape(2,2) # shape (2, 2) >>> np.atleast_2d(arr2) array([[0, 1], [2, 3]]) >>> _.shape (2, 2)答案 1 :(得分:1) 您确定要以您希望的方式编制索引吗?在indices_h和indices_w是可广播的整数索引数组的情况下,结果将具有indices_h和indices_w的广播形状。因此,如果您想确保结果是2D,请将索引数组设为2D。 否则,如果你想要indices_h [i]和indices_w [j]的所有组合(对于所有i,j),例如,顺序索引: sub_array = orig_array[indices_h][:, indices_w]有关高级索引的详细信息,请查看documentation。 本文经用户投稿或网站收集转载,如有侵权请联系本站。 |
CopyRight 2018-2019 实验室设备网 版权所有 |