Python 如何将一维numpy数组作为一个包含1行的矩阵进行索引?

Python 如何将一维numpy数组作为一个包含1行的矩阵进行索引?,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,我有一个1D numpy阵列,如: a = np.array([1,2,3,4,5]) 我想把这个a作为索引(好像它是一个1乘5的矩阵,a[0,2]等于3): a[0,2] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 a[0,1] 索引器:数组的索引太多 我知道在MATLAB中这是可能的,但是在Python中如何做到这一点呢?我之所以需要它,是因为a是动态生成的,有时是1D数组,有时是nD数组。我需要在循环中使用统一的索引方式。使用。重塑并传递-1作为第二个参数: >>

我有一个1D numpy阵列,如:

a = np.array([1,2,3,4,5])
我想把这个
a
作为索引(好像它是一个1乘5的矩阵,
a[0,2]
等于3):

a[0,2]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
a[0,1]
索引器:数组的索引太多

我知道在MATLAB中这是可能的,但是在Python中如何做到这一点呢?我之所以需要它,是因为
a
是动态生成的,有时是1D数组,有时是nD数组。我需要在循环中使用统一的索引方式。

使用
。重塑
并传递
-1
作为第二个参数:

>>> a = np.array([1,2,3,4,5])
>>> a = a.reshape(1, -1)
>>> a[0,2]
3
注意,如果您需要任何类型的
ndarray
,则这可能不是您想要的:

>>> arr = np.array([[1,2],[3,4]])
>>> arr
array([[1, 2],
       [3, 4]])
>>> arr.reshape(1, -1)
array([[1, 2, 3, 4]])
因此,您可能需要添加条件检查:

>>> if a.ndim < 2:
...     a = a.reshape(1, -1)
...
>>> a
array([[1, 2, 3, 4, 5]])
>>如果a.ndim<2:
...     a=a.重塑(1,-1)
...
>>>a
数组([[1,2,3,4,5]]

使用
。重塑
并传递
-1
作为第二个参数:

>>> a = np.array([1,2,3,4,5])
>>> a = a.reshape(1, -1)
>>> a[0,2]
3
注意,如果您需要任何类型的
ndarray
,则这可能不是您想要的:

>>> arr = np.array([[1,2],[3,4]])
>>> arr
array([[1, 2],
       [3, 4]])
>>> arr.reshape(1, -1)
array([[1, 2, 3, 4]])
因此,您可能需要添加条件检查:

>>> if a.ndim < 2:
...     a = a.reshape(1, -1)
...
>>> a
array([[1, 2, 3, 4, 5]])
>>如果a.ndim<2:
...     a=a.重塑(1,-1)
...
>>>a
数组([[1,2,3,4,5]]
您可以使用它将一维阵列升级为二维阵列:

a = np.atleast_2d(a)
如果你把这个放在你的循环中,那么你就可以把所有的
a
s当作2D(或更高维)数组


比如说,

In [103]: a1 = np.array([1,2,3,4,5])
In [105]: np.atleast_2d(a1)
Out[107]: array([[1, 2, 3, 4, 5]])
虽然高维数组保持不变:

In [104]: a2 = np.array([[1,2],[3,4]])
In [108]: np.atleast_2d(a2)
Out[108]: 
array([[1, 2],
       [3, 4]])
可以使用将一维阵列升级为二维阵列:

a = np.atleast_2d(a)
如果你把这个放在你的循环中,那么你就可以把所有的
a
s当作2D(或更高维)数组


比如说,

In [103]: a1 = np.array([1,2,3,4,5])
In [105]: np.atleast_2d(a1)
Out[107]: array([[1, 2, 3, 4, 5]])
虽然高维数组保持不变:

In [104]: a2 = np.array([[1,2],[3,4]])
In [108]: np.atleast_2d(a2)
Out[108]: 
array([[1, 2],
       [3, 4]])

此外,您还可以使用这些:

In [7]: a = np.array([1,2,3,4,5])

# make it as row vector of shape (1, 5)
In [8]: a = a[np.newaxis, :]

In [9]: a[0,2]
Out[9]: 3


# another approach using `None`    
In [10]: a = np.array([1,2,3,4,5])

# make it as row vector of shape (1, 5)
In [11]: a = a[None, :]

In [12]: a[0, 2]
Out[12]: 3

当您使用或
None
一次时,会添加一个新轴;请注意,您已将其分配给原始阵列,以修改最终阵列。

此外,您还可以使用这些:

In [7]: a = np.array([1,2,3,4,5])

# make it as row vector of shape (1, 5)
In [8]: a = a[np.newaxis, :]

In [9]: a[0,2]
Out[9]: 3


# another approach using `None`    
In [10]: a = np.array([1,2,3,4,5])

# make it as row vector of shape (1, 5)
In [11]: a = a[None, :]

In [12]: a[0, 2]
Out[12]: 3

当您使用或
None
一次时,会添加一个新轴;请注意,您已将其分配给原始数组,以便对最终数组进行修改。

如果它是三维数组,该怎么办?我肯定它将是二维的,因为我的原始数据是一组多维数据点,每个点都有一个分区标签。我试图用相同的标签提取数据点,有些标签可能只有一个数据点,有些有很多数据点。如果你确定它是2D的,你有时不应该得到1D数组。对不起,我的意思是至少1D,最多2D。MATLAB总是2D或更高。如果它是3D数组,怎么办?我肯定它是2D,因为我的原始数据是一堆多维数据点,每个数据点都有一个分区标签。我试图用相同的标签提取数据点,有些标签可能只有一个数据点,有些有很多数据点。如果你确定它是二维的,你有时不应该得到1D数组。对不起,我的意思是至少1D,最多2D。MATLAB总是2D或更高。这很方便!这很方便!