簡體   English   中英

如何索引一維numpy數組,就像它是具有1行的矩陣一樣?

[英]How to index a 1D numpy array as if it is a matrix with 1 row?

我有一個像一維的numpy數組:

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

和我想索引此a像(好像它是一個1 5矩陣,和a[0,2]將等於3):

a[0,2]

Traceback (most recent call last):

  File "<ipython-input-34-2fc0526218b3>", line 1, in <module>
    a[0,1]

IndexError: too many indices for array

我知道在MATLAB中是可能的,但是如何在Python中做到這一點? 我需要這個的原因是因為a是動態生成的,有時是一維數組,有時是nD數組。 我需要在循環中使用統一的索引方式。

使用.reshape並將-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]])

您可以使用np.atleast_2d將一維數組提升為二維:

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

一次使用np.newaxisNone時,將添加一個新軸。 請注意,您已將此分配給原始數組以對最終數組進行修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM