Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重塑数组中不同维度的numpy数组的形状_Python_Arrays_Numpy_Neural Network_Particle Swarm - Fatal编程技术网

Python 重塑数组中不同维度的numpy数组的形状

Python 重塑数组中不同维度的numpy数组的形状,python,arrays,numpy,neural-network,particle-swarm,Python,Arrays,Numpy,Neural Network,Particle Swarm,因此,我们的任务是用粒子群优化算法优化神经网络。PSO需要一个包含所有权重和偏差的一维列表,如[0.1 0.244…0.214]。NN需要一个具有不同维度的数组,如[[x,y],[m,n],…(所有隐藏层矩阵)…,[p,q]]x和y是输入层的维度,然后是所有隐藏层,最后是p和q-输出层的维度 我可以轻松地展平数组以将其传递给PSO,但我需要一种方法,将修改后的数组重新整形为与NN中的起始数组具有相同维度的相同数组 维度取决于层中神经元的数量,我们从一开始就有这些信息 我试图跟踪shapes数组,

因此,我们的任务是用粒子群优化算法优化神经网络。PSO需要一个包含所有权重和偏差的一维列表,如[0.1 0.244…0.214]。NN需要一个具有不同维度的数组,如[[x,y],[m,n],…(所有隐藏层矩阵)…,[p,q]]x和y是输入层的维度,然后是所有隐藏层,最后是p和q-输出层的维度

我可以轻松地展平数组以将其传递给PSO,但我需要一种方法,将修改后的数组重新整形为与NN中的起始数组具有相同维度的相同数组

维度取决于层中神经元的数量,我们从一开始就有这些信息

我试图跟踪shapes数组,并创建一个索引数组来知道何时停止,但它似乎不起作用。我现在正在尝试切片,但还没有雪茄。也可以对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())

我的问题是如何获取新的arr并将其重新组合起来,使其看起来像arr,是否有一种漂亮而快速的方法来实现这一点。

您可以将形状保存在变量中(它只是一个元组)。尝试以下方法:

...
old_shape = arr.shape

# ... do flattening here

new_arr.reshape(old_shape)

你好你能提供一个简单的工作示例,让我们试试运气吗?也就是说,如果你已经得到的答案不令人满意,@iliar Done。“是的!非常感谢。它有一个小警告。。。它不能在指定n=s[0]*s[1]的直线上处理一维数组,因为numpy给出的形状是例如[4,]。因此,元组将超出范围。@eddieevt对其进行了编辑,以便在这些情况下更加健壮。现在它将处理数组的任何维度。我正要编辑我的注释并说to do n=np。prod(s)可以修复它,但我只能每5分钟编辑一次注释!哈哈,我学到了一些东西,耶!再次感谢您,好心的先生!:)
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