繁体   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