簡體   English   中英

將 2d 數組的數組轉換為一個 3d 數組

[英]Convert array of 2d-arrays to one 3d-array

我有一個 numpy 二維 numpy arrays 數組(句子的單詞嵌入數組),例如

embedded_sentences = np.array([ np.array([[1,2,3],[0,0,0]]), np.array([[10,20,30],[40,50,60]]) ])

我需要將此轉換為 3d 數組

np.array([ [[1,2,3],[0,0,0]], [[10,20,30],[40,50,60]] ])

即從shape(2,) (兩個句子)到shape(2,2,3) (兩個單詞的兩個句子,其中每個單詞嵌入 3 個維度)

這樣我就可以使用pytorch使用torch.from_numpy(embedded_sentences)對其進行轉換。

我已經嘗試過np.vstack(embedded_sentences)np.dstack(embedded_sentences)但這似乎不起作用。

編輯

我可以這樣做

embedded_sentences = np.dstack(embedded_sentences) embedded_sentences = np.transpose(embedded_sentences,(2,0,1))

這有效,但不漂亮。

復制粘貼您的代碼會立即生成 3d 數組。

但是,如果我們 go 確保它是一維 object dtype 數組的額外步驟:

 In [16]: x = np.empty(2,object); x[:] = list(embedded_sentences) In [17]: x Out[17]: array([array([[1, 2, 3], [0, 0, 0]]), array([[10, 20, 30], [40, 50, 60]])], dtype=object)

這實際上是 2 個 arrays 的列表。 我們可以像np.array一樣使用np.stack加入它們:

 In [18]: np.stack(x) Out[18]: array([[[ 1, 2, 3], [ 0, 0, 0]], [[10, 20, 30], [40, 50, 60]]])

我可能應該堅持查看您嘗試的替代方案有什么問題,例如vstackdstack

 In [19]: np.vstack(x) Out[19]: array([[ 1, 2, 3], [ 0, 0, 0], [10, 20, 30], [40, 50, 60]]) In [20]: np.dstack(x) Out[20]: array([[[ 1, 10], [ 2, 20], [ 3, 30]], [[ 0, 40], [ 0, 50], [ 0, 60]]])

正如您發現的那樣,可以轉置dstack vstack可以重新整形。

所有這些stack函數都會調整一些維度並執行np.concatenate

您的輸入已經具有所需的形狀和元素。 請看下面的代碼片段:

 In [1]: import numpy as np In [2]: embedded_sentences = \...: np.array([...: np.array([[1,2,3],[0,0,0]]),...: np.array([[10,20,30],[40,50,60]])...:...: ]) In [3]: embedded_sentences.shape Out[3]: (2, 2, 3)

我猜你的意思是:

我有一個 2d-numpy arrays 的numpy 數組列表(句子的單詞嵌入數組),例如

In [4]: embedded_sentences = \...: [...: np.array([[1,2,3],[0,0,0]]),...: np.array([[10,20,30],[40,50,60]])...: ]

如果是,那么np.array應該足夠了,如下所示:

 In [5]: embedded_sentences = np.array(embedded_sentences) In [6]: embedded_sentences Out[6]: array([[[ 1, 2, 3], [ 0, 0, 0]], [[10, 20, 30], [40, 50, 60]]]) In [7]: embedded_sentences.shape Out[7]: (2, 2, 3)

但是,在您的帖子中,您提到這將成為pytorch的輸入。 因此,可以直接使用pytorch ,如下圖:

 In [8]: import torch In [9]: t = torch.tensor(embedded_sentences) In [10]: t Out[10]: tensor([[[ 1, 2, 3], [ 0, 0, 0]], [[10, 20, 30], [40, 50, 60]]]) In [11]: t.shape Out[11]: torch.Size([2, 2, 3]) In [12]: t.dtype Out[12]: torch.int64

暫無
暫無

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

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