簡體   English   中英

Python-將數組列表轉換為2D數組

[英]Python - Conversion of list of arrays to 2D array

我有一個格式如下的數據集:

A=[(Num1,Num2,Num3), (Num4,Num5,Num6), (Num7,Num8,Num9)]

A.shape = (3,)

我想將其轉換為2D numpy數組:

A=[[Num1,Num2,Num3],[Num4,Num5,Num6],[Num7,Num8,Num9]]

A.shape = (3,3)

我該怎么做,最好沒有循環? 謝謝。

不知道我是否正確理解了這個問題,但這對您有用嗎?

import numpy as np
A = [[1,2,3],[4,5,6],[7,8,9]]
A = np.array(A)

如果A是numpy數組的列表,如何處理:

Ah = np.vstack(A)
Av = np.hstack(A)

如果我正確理解了您的要求,則可能是numpy沒有將數組數組轉換為2d數組的情況。 當您的數組大小不同時,可能會發生這種情況。 例:

自動轉換為二維數組:

import numpy as np
a = np.array([np.array([1,2,3]),np.array([2,3,4]),np.array([6,7,8])])
print a

輸出:

>>>[[1 2 3]
    [2 3 4]
    [6 7 8]]

沒有自動轉換(在第二個子數組中查找更改):

import numpy as np
b = np.array([np.array([1,2,3]),np.array([2,3,4,5]),np.array([6,7,8])])
print b

輸出:

>>>[array([1, 2, 3]) array([2, 3, 4, 5]) array([6, 7, 8])]

我發現了將數組數組轉換為2d數組的幾種方法。 無論如何,您都需要去除大小不同的子數組。 因此,您將需要一個掩碼以僅選擇“好”子數組。 然后,可以將此掩碼與列表推導一起使用來重新創建數組,如下所示:

import numpy as np

a = np.array([np.array([1,2,3]),np.array([2,3,4,5]),np.array([6,7,8])])
mask = np.array([True, False, True])

c = np.array([element for (i,element) in enumerate(a) if mask[i]])

print a
print c

輸出:

>>>>[array([1, 2, 3]) array([2, 3, 4, 5]) array([6, 7, 8])]
>>>>[[1 2 3]
     [6 7 8]]

或者,您可以刪除“壞的”子數組並使用vstack(),如下所示:

import numpy as np

a = np.array([np.array([1,2,3]),np.array([2,3,4,5]),np.array([6,7,8])])
mask = np.array([True, False, True])

d = np.delete(a,np.where(mask==False))
e = np.vstack(d)

print a
print e

輸出:

>>>>[array([1, 2, 3]) array([2, 3, 4, 5]) array([6, 7, 8])]
>>>>[[1 2 3]
     [6 7 8]]

我相信對於大型陣列,第二種方法會更快,但我尚未測試時序。

我想像:

A = map(lambda t: list(t), A)

如果您有一個tupples數組。 具有dtype = object的(3,)數組。
我知道,沒有辦法通過廣播將它們優雅地拆成(3,3)陣列。 轉換回列表,然后創建一個新數組似乎是最簡單的。

In [314]: data
Out[314]: array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], dtype=object)
In [315]: data.shape
Out[315]: (3L,)

data2 = np.empty((3,3), dtype=int)

#Neither of these work.
data2[:] = data[:]
data2[:] = data[:, None]

#This will work, but requires looping
data2[0,:] = data[0]
data2[1,:] = data[1]
data2[2,:] = data[2]

#This is the easies way i could find
data2 = np.array(data.tolist())

暫無
暫無

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

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