Tho*_*sen 6 python arrays numpy
我有一段代码切片2D NumPy数组并返回结果(子)数组.在某些情况下,切片仅索引一个元素,在这种情况下,结果是一个元素数组:
>>> sub_array = orig_array[indices_h, indices_w]
>>> sub_array.shape
(1,)
Run Code Online (Sandbox Code Playgroud)
如何以一般方式强制此数组为二维?即:
>>> sub_array.shape
(1,1)
Run Code Online (Sandbox Code Playgroud)
我知道这很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
Run Code Online (Sandbox Code Playgroud)
这是我能得到的最好的,还是NumPy有更"本土"的东西?
加成:
正如/sf/answers/2218893001/中指出的那样,我的索引编写错误.我真的很想做:
sub_array = orig_array[indices_h][:, indices_w]
Run Code Online (Sandbox Code Playgroud)
当只有一个条目indices_h,但将其与np.atleast_2d另一个答案中的建议组合时,这不起作用,我到达:
sub_array = np.atleast_2d(orig_array[indices_h])[:, indices_w]
Run Code Online (Sandbox Code Playgroud)
Ale*_*ley 11
听起来你可能正在寻找atleast_2d.此函数将1D数组的视图作为2D数组返回:
>>> arr1 = np.array([1.7]) # shape (1,)
>>> np.atleast_2d(arr1)
array([[ 1.7]])
>>> _.shape
(1, 1)
Run Code Online (Sandbox Code Playgroud)
已经是2D(或具有更多尺寸)的数组不变:
>>> arr2 = np.arange(4).reshape(2,2) # shape (2, 2)
>>> np.atleast_2d(arr2)
array([[0, 1],
[2, 3]])
>>> _.shape
(2, 2)
Run Code Online (Sandbox Code Playgroud)
定义 numpy 数组时,您可以使用关键字参数ndmin来指定您至少需要两个维度。例如
arr = np.array(item_list, ndmin=2)
arr.shape
>>> (100, 1) # if item_list is 100 elements long etc
Run Code Online (Sandbox Code Playgroud)
在问题的例子中,只需做
sub_array = np.array(orig_array[indices_h, indices_w], ndmin=2)
sub_array.shape
>>> (1,1)
Run Code Online (Sandbox Code Playgroud)
与 不同的是,这也可以扩展到更高的维度np.atleast_2d()。
| 归档时间: |
|
| 查看次数: |
4554 次 |
| 最近记录: |