[英]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.