[python] 如何在NumPy中創建一個空的數組/矩陣?



3 Answers

NumPy數組是一個與列表非常不同的數據結構,其設計目的是以不同的方式使用。 您使用hstack可能效率很低......每當您調用它時,現有數組中的所有數據都將被複製到新的數據中。 ( append函數會有同樣的問題。)如果您想一次構建一列,那麼最好將它保存在列表中,直到它完成,然後才將其轉換為數組。

例如


mylist = []
for item in data:
    mylist.append(item)
mat = numpy.array(mylist)

item可以是列表,數組或任何迭代,只要每個item具有相同數量的元素。
在這種特殊情況下( data是一些持有矩陣列的迭代),您可以簡單地使用


mat = numpy.array(data)

(還要注意,使用list作為變量名可能不是一種好的做法,因為它會通過該名稱掩蓋內置類型,這可能會導致錯誤。)

編輯:

如果由於某種原因,你真的想創建一個空數組,你可以使用numpy.array([]) ,但這很少有用!

Question

我不知道如何以我通常使用列表的方式使用數組或矩陣。 我想創建一個空數組(或矩陣),然後一次添加一列(或行)。

目前我能找到的唯一方法就是:

mat = None
for col in columns:
    if mat is None:
        mat = col
    else:
        mat = hstack((mat, col))

而如果它是一個列表,我會做這樣的事情:

list = []
for item in data:
    list.append(item)

有沒有辦法將這種符號用於NumPy數組或矩陣?




根據你使用的是什麼,你可能需要指定數據類型(參見'dtype' )。

例如,要創建8位值的二維數組(適合用作單色圖像):

myarray = numpy.empty(shape=(H,W),dtype='u1')

對於RGB圖像,在形狀中包含顏色通道的數量: shape=(H,W,3)

您可能還想考慮使用numpy.empty零初始化,而不是使用numpy.empty 。 請參閱here的說明。




我研究了很多,因為我需要在我的一個學校項目中使用numpy.array作為一個集合,並且我需要初始化為空...我在中找不到任何相關答案,所以我開始塗鴉的東西。

# Initialize your variable as an empty list first
In [32]: x=[]
# and now cast it as a numpy ndarray
In [33]: x=np.array(x)

結果將是:

In [34]: x
Out[34]: array([], dtype=float64)

因此你可以直接初始化一個np數組,如下所示:

In [36]: x= np.array([], dtype=np.float64)

我希望這有幫助。




如果你完全不知道數組的最終大小,你可以像這樣增加數組的大小:

my_arr = numpy.zeros((0,5))
for i in range(3):
    my_arr=numpy.concatenate( ( my_arr, numpy.ones((1,5)) ) )
print(my_arr)

[[ 1.  1.  1.  1.  1.]  [ 1.  1.  1.  1.  1.]  [ 1.  1.  1.  1.  1.]]
  • 注意第一行中的0
  • numpy.append是另一種選擇。 它調用numpy.concatenate



Related