我有一个大小为 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
获得