我有一个学校的作业,我被卡住了迭代的东西。
我想在mathplotlib图像矩阵上迭代,并从我创建的生成器中插入图像。
# this is the generator, it yields back 2 integers (true_value and prediction)
# and a {64,} image shape (image)
def false_negative_generator(X_test, y_test, predicted):
for image, true_value, prediction in zip(X_test, y_test, predicted):
if true_value != prediction:
yield image, true_value, prediction
我迭代的代码显然不是很好,但我不知道如何实现我想要的迭代。
# axrow is a row in the plot matrix, ax is a cell in the matrix
for image, lable, prediction in false_negative_generator(X_test, y_test, predicted):
for axrow in axes:
for ax in axrow:
ax.set_axis_off()
ax.imshow(image.reshape(8, 8), cmap=plt.cm.gray_r, interpolation="nearest")
ax.set_title(f"{lable} {prediction}")
我希望这个问题是清楚易懂的。我很想知道是否有什么不是100%的问题,以便将来改进。谢谢!编辑:
我的目标是将生成器中的每个对象插入到单个矩阵单元中。
[我现在得到的是这个(最后一个对象从生成器在所有矩阵单元,当我想在每个单元不同的对象):1
您可能会使用以下内容:
iterator = false_negative_generator(X_test, y_test, predicted)
for axrow in axes:
for ax in axrow:
image, lable, prediction = next(iterator)
ax.set_axis_off()
ax.imshow(image.reshape(8, 8), cmap=plt.cm.gray_r, interpolation="nearest")
ax.set_title(f"{lable} {prediction}")
创建迭代器,但还没有检索数据。然后,next()
函数每次在嵌套循环内推进迭代器,从迭代器中检索所需的项。
假设生成器返回的图像数量与图形的轴数相同,您可以这样做:
i = 0 # counter
axs = axes.flatten() # convert the grid of axes to an array
for image, lable, prediction in false_negative_generator(X_test, y_test, predicted):
axs[i].set_axis_off()
axs[i].imshow(image.reshape(8, 8), cmap=plt.cm.gray_r, interpolation="nearest")
axs[i].set_title(f"{lable} {prediction}")
i += 1