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

2024-04-26 05:14:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张五万码的单子。说a。每个元素都是一个元组,比如说b=a[0]。每个元组由2个列表组成,例如c=b[0], d=b[1]。第一个列表即c的长度为784,第二个列表即d的长度为10。 从这个列表中,我需要提取以下内容:
将列表的前10个元素分组a。从这10个元组中,提取它们的第一个元素(c),并将它们放入大小为784x10的矩阵中。还提取元组的第二个元素,并将它们放入另一个大小为10x10的矩阵中。对列表a中的每批10个元素重复此操作。
这是否可以在一行中使用列表理解来完成?或者我必须写多个for循环?哪种方法是最有效和最好的? 注意:如果我得到一个列表或者numpy.ndarray公司矩阵。你知道吗

附加信息:我正在学习this有关神经网络的教程,该教程旨在设计一个识别手写数字的神经网络。利用MNIST数据库对网络进行训练。训练数据采用上述格式。我需要为每个小批量创建一个输入图像和预期输出的矩阵。你知道吗

这是我试过的代码。我要一张五万码的单子。它不会被分成小批量

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可用here


Tags: innumpy元素列表fordatasizebatch
1条回答
网友
1楼 · 发布于 2024-04-26 05:14:18

我写我的答案之前,你添加的来源,因此它是纯粹基于第一部分,你写出来的话。因此,就输入大小的变化而言,它不是非常故障安全的。如果你在书中进一步阅读,andersnielsen实际上提供了他自己的实现。你知道吗

我的主要答案不是一行一行的答案,因为这会混淆它的功能,我非常建议你把这样复杂的过程写出来,这样你就能更好地理解实际发生的事情。在我的代码中,我创建了第一个矩阵,其中包含矩阵中的c元素,以及第二个矩阵,其中包含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 = [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)]

相关问题 更多 >