簡體   English   中英

重塑數組內不同維度的 numpy arrays

[英]Reshaping numpy arrays of differing dimensions inside an array

因此,任務是使用 PSO 優化神經網絡。 PSO 需要一個包含所有權重和偏差的一維列表,例如 [0.1 0.244... 0.214]。 NN 需要一個具有不同維度的 arrays 數組,例如 [[x,y], [m,n], ...(所有隱藏層矩陣)... ,[p,q]] X 和 y 是輸入層的尺寸,然后是所有隱藏層,最后是 p 和 q - output 層的尺寸。

我可以輕松地將數組展平以將其傳遞給 PSO,但我需要一種方法來獲取修改后的數組並將其重新整形為相同的 arrays 數組,其尺寸與來自 NN 的起始數組相同。

維度取決於層中神經元的數量,我們從一開始就有這些信息。

我試圖跟蹤形狀數組並創建一個索引數組以知道何時停止,但它似乎不起作用。 我現在正在嘗試切片,但還沒有雪茄。 也可以對 NN 進行修改,但如何創建它以獲取預定義的權重列表? 可能有一種非常好的和有效的方法來做到這一點,但我還沒有想到它......有什么建議嗎?

例子:

a = np.array([1,2,3])
b = np.array([7,8,9,10])
c = np.array([12,13,14,15,16])
b.reshape(2,2)
arr = []
arr.append(a)
arr.append(b)
arr.append(c)

這是 NN 使用權重列表的一個非常簡單的示例 - 多維數組列表。 如果需要,可以使用 np.asarray(arr) 將 arr 轉換為 numpy 對象數組。

展平很容易,這就是我的做法(可能有一個更好的不需要循環的方法,如果您知道,如果您分享,我將不勝感激)。

展平:

new_arr = np.array([])
for i in range(len(arr)):
    new_arr = np.append(arr, arr[i].flatten())

我的問題是如何獲取 new_arr 並將其重新組合在一起以使其看起來像 arr 並且有一種美麗而快速的方法來做到這一點。

您可以將形狀保存在變量中(它只是一個元組)。 嘗試類似:

...
old_shape = arr.shape

# ... do flattening here

new_arr.reshape(old_shape)
new_arr = np.array([])
shapes=[]
for i in range(len(arr)):
    new_arr = np.append(new_arr, arr[i].flatten())
    shapes.append(arr[i].shape)

#do whatever

restoredArray =[]
offset=0
for i in range(len(shapes)):
    s = shapes[i]
    n = np.prod(s)
    restoredArray.append(new_arr[offset:(offset+n)].reshape(s))
    offset+=n

暫無
暫無

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

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