Python 重塑数组中不同维度的numpy数组的形状
因此,我们的任务是用粒子群优化算法优化神经网络。PSO需要一个包含所有权重和偏差的一维列表,如[0.1 0.244…0.214]。NN需要一个具有不同维度的数组,如[[x,y],[m,n],…(所有隐藏层矩阵)…,[p,q]]x和y是输入层的维度,然后是所有隐藏层,最后是p和q-输出层的维度 我可以轻松地展平数组以将其传递给PSO,但我需要一种方法,将修改后的数组重新整形为与NN中的起始数组具有相同维度的相同数组 维度取决于层中神经元的数量,我们从一开始就有这些信息 我试图跟踪shapes数组,并创建一个索引数组来知道何时停止,但它似乎不起作用。我现在正在尝试切片,但还没有雪茄。也可以对NN进行修改,但如何创建它以使其采用预定义的权重列表?可能有一个非常好和有效的方法来做,但我只是还没有想到它。。。有什么建议吗 例如: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数组,
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