簡體   English   中英

將行向量添加到 3-D numpy 數組

[英]Adding a row vector to a 3-D numpy array

假設我在 numpy 中有一個 3-D 數組

a = [ [[1,2], [3,4]] , [[5,6], [7,8]] ]

我想向矩陣添加一個新的行向量,以便輸出例如,如果我想將行向量 [9,10] 添加到 3d 數組中的第二個矩陣:

a = [ [[1,2], [3,4]] , [[5,6], [7,8], [9,10]] ]

我知道如何使用np.append將行向量添加到二維數組。 但我不知道如何用 3-D 數組來做到這一點。 我曾嘗試使用np.append但我得到的只是維度錯誤、扁平數組或只是錯誤的數組。 在 numpy 中執行此操作的正確方法是什么?

Numpy 進行內存優化並創建您請求的大小的np.ndarray 最好一次創建一個您需要的大小的數組並對其進行操作,而不是多次添加新行。

因此,如果您將使用許多附加:使用列表。 如果您知道總大小:使用 numpy 數組。

您面臨的另一個問題是:形狀不統一。 那是

a = np.array([ [[1,2], [3,4]] , [[5,6], [7,8]] ])
# a.shape is (2, 2, 2)
new_a = np.array([ [[1,2], [3,4]] , [[5,6], [7,8], [9, 10] ]])
# What is the shape of new_a?

可以執行您想要的操作的代碼是:

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


res = np.zeros(a.shape[0], dtype="object")
res[0] = a[0]
res[1] = np.zeros((a.shape[1]+1, a.shape[2]))
res[1, :-1] = a[1, :]
res[1, -1] = b

您可以實現如下目標,但問題仍然是這在多大程度上是明智的,因為使用具有dtype=object的數組進行矢量化變得更加困難。 但是你去吧:

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

res = np.array([a[0],np.vstack([a[1],b])],dtype=object)

輸出:

array([array([[1, 2],
              [3, 4]]), array([[ 5,  6],
                               [ 7,  8],
                               [ 9, 10]])], dtype=object)

暫無
暫無

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

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