将嵌套列表合并到列表元组列表中的组中

我有一个大小为 50000 的列表。说a。每个元素都是一个元组,比如b=a[0]。每个元组由 2 个列表组成,比如c=b[0], d=b[1]。第一个列表 iec的长度为 784,第二个 ied的长度为 10。从这个列表中,我需要提取以下内容:

将 list 的前 10 个元素分组a。从这 10 个元组中,提取它们的第一个元素 ( c) 并将它们放入大小为 的矩阵中784x10。还要提取元组的第二个元素并将它们放入另一个 size 矩阵中10x10。对 list 中每批 10 个元素重复此操作a。

这可以使用列表理解在一行中完成吗?还是我必须写多个 for 循环?哪种方法是有效和最好的?注意:如果我得到一个列表或 numpy.ndarray 矩阵也没关系。


附加信息:我正在关注这个关于神经网络的教程,该教程旨在设计一个神经网络来识别手写数字。MNIST 数据库用于训练网络。训练数据采用上述格式。我需要为每个 mini_batch 创建一个 input_images 和 expected_output 矩阵。


这是我试过的代码。我得到一个大小为 50000 的列表。它没有被拆分成 mini_batches


f = gzip.open('mnist.pkl.gz', 'rb')

tr_d, va_d, te_d = pickle.load(f, encoding='latin1')

f.close()

training_inputs = [numpy.reshape(x, (784, 1)) for x in tr_d[0]]

training_results = [vectorized_result(y) for y in tr_d[1]]

training_data = zip(training_inputs, training_results)


# training_data is a list of size 50000 as described above

n = len(training_data)  # n=50000

mini_batch_size = 10

mini_batch = [x[0] for k in range(0, n, mini_batch_size) for x in training_data[k:k+mini_batch_size]]

将mnist.pkl.gz可在这里


米脂
浏览 209回答 1
1回答

翻过高山走不出你

我在你添加来源之前写了我的答案,因此它纯粹是基于你用文字写出来的第一部分。因此,就输入大小的变化而言,它不是很安全。如果您在书中进一步阅读 Anders Nielsen 实际上提供了他自己的实现。我的主要答案不是单行答案,因为这会混淆它的作用,我强烈建议您写出这样的复杂流程,以便您更好地了解实际发生的情况。在我的代码中,我创建了一个 firstMatrix,其中包含矩阵中的 c 元素,以及一个 secondMatrix,其中包含 d 元素。我对每批 10 个都这样做,但不知道之后你想用矩阵做什么,所以我只为每批制作它们。如果你想对它们进行分组或什么的,请说出来,我会尝试实现它。for batch in np.array_split(a,10):    firstMatrix = np.zeros(shape=(784,10))    secondMatrix = np.zeros(shape=(10,10))    for i in range(len(batch)):        firstMatrix[:,i] = batch[i][0]        secondMatrix[:,i] = batch[i][1]如果你真的想要一个单行,这里有一个由 firstMatrices 组成的数组和一个为 secondMatrices 的数组:firstMatrices = [np.array([batch[i][0] for i in range(len(batch))]).T for batch in np.array_split(a,10)]secondMatrices = [np.array([batch[i][1] for i in range(len(batch))]).T for batch in np.array_split(a,10)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python