python 您所在的位置:网站首页 numpy二维切片 python

python

2022-10-09 04:11| 来源: 网络整理| 查看: 265

python - Python:我如何强制1元素NumPy数组是二维的?,第1张

我有一段代码切片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 实验室设备网 版权所有