簡體   English   中英

如何將二維數組轉換為一維數組?

[英]How to transfer 2-D array into a 1-D array?

我有二維 numpy 數組arr

array([[0., 1., 0.],
       [1., 0., 0.],
       [1., 0., 0.],
       [0., 0., 1.],
       [1., 0., 0.],
       [1., 0., 0.]]

我想將其轉換為一維向量:

vec = [1, 0, 0, 2, 0, 0]

值 0、1 和 2 應對應於art列,其中值等於 1。

有沒有非 for 循環的方法來做到這一點?

嘗試麻木。 非零

>>> import numpy as np
>>> a = np.array([[0., 1., 0.],
...               [1., 0., 0.],
...               [1., 0., 0.],
...               [0., 0., 1.],
...               [1., 0., 0.],
...               [1., 0., 0.]])
>>> np.nonzero(a)[1]
array([1, 0, 0, 2, 0, 0])

麻木。 其中

>>> np.where(a)[1]
array([1, 0, 0, 2, 0, 0])

您可以使用矩陣數學來解決這個問題,因為每行只有一個非零值。 帶有“位置”向量的簡單點積將為您提供所需的輸出。 你想模擬矩陣方程 A*x = y,只要 x 是一個列向量,你就會得到一個列向量作為答案。

>>> import numpy as np
>>> a = np.array([[0., 1., 0.],
...               [1., 0., 0.],
...               [1., 0., 0.],
...               [0., 0., 1.],
...               [1., 0., 0.],
...               [1., 0., 0.]])
>>> x = (0,1,2)
>>> y = np.dot(a,x)
>>> y
array([1., 0., 0., 2., 0., 0.])

使用這種方法,您可以將“位置”向量更改為您想要的任何內容,並且它會適當地“索引”(我將其放在引號中,因為它是一個數學技巧)。 例如:

>>> x = (2,4,8)
>>> np.dot(a,x)
array([4., 2., 2., 8., 2., 2.])
>>> a.nonzero()[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)

更靈活的條件

>>> np.nonzero(a==1)[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)

>>> np.where(a==1)[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)

>>> np.where(a>0)[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)

暫無
暫無

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

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