[英]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.newaxis
或None
時,將添加一個新軸。 請注意,您已將此分配給原始數組以對最終數組進行修改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.