如何存储不同大小的矩阵(如Matlab中的单元格数组)?

时间:2017-09-07 17:11:28

标签: python list cell

我正在编写Python代码(也是Python相对较新的代码),使用神经网络进行分类。隐藏层中的神经元数量不同,这意味着我想要保存不同大小的各种矩阵。

如果这是MATLAB,我会做

for layer_iteration = 1 : number_of_layers
    cell_matrix{layer_iteration} = create_matrix(size_current, size_previous)
end

将在cell_matrix {layer_iteration}中存储不同大小的矩阵。

我不太确定如何在Python中执行此操作,因此我的第一个想法是在每次迭代时创建矩阵,展平它们并附加它们。然后我创建一个与展平数组大小相同的索引矩阵,其中每个值都是一个整数,指向正确的layer_iteration。然后我可以在以后的操作中使用索引来找到1D矩阵的正确切片并重新整形。这是一些代码:

layer_sizes = [2, 10 ,6 ,2]
total_amount_of_values = 92 e.g. 2*10 + 10*6 + 6*2
W = np.zeros(total_amount_of_values)
idx_W = np.zeros((total_amount_of_values,), dtype=np.int)

it_idx = 0
for idx, val in enumerate(layer_sizes):

    to_idx = idx + 1

    if idx == 0:
       start_idx = 0
    else:
       start_idx = end_idx

    if it_dx < len(layer_sizes)-1:
       tmp_W = create_matrix(val, layer_sizes[to_idx])
       end_idx = start_idx + layer_sizes[idx + 1] * val
       W[start_idx:end_idx] = tmp_W
       idx_W[start_idx:end_idx] = int(it_idx)

    it_idx += 1

如果我想稍后使用W进行矩阵乘法,我需要做的就是:

tmp_W = W[idx_W == iteration]
tmp_W = np.reshape(tmp_W, (size_1, size_2))

这很好但我已经意识到它根本不像Pythonic。我现在处于代码的一部分,使用我的技术使事情复杂化。根据我当前的代码,更重要的是,我在Python中的教育,我真​​的会受益于一种更简单的存储不同大小矩阵的方法。

什么是最好的解决方案?

谢谢!

0 个答案:

没有答案