绘制数组中的第n个元素

时间:2019-04-16 00:59:24

标签: python numpy matplotlib

我正在从头开始编写一个简单的神经网络。神经网络以方法simple_1_layer_classification_NN实现。从for loop(在下面的代码中)可以看到,对于每个纪元(神经网络的训练运行),我都将成本(误差容限)值附加到数组costs中。问题是,培训运行的时间可能多达数千甚至上百万。意味着costs数组可以附加许多cost元素。

由于我不想在图形上绘制成千上万个数据点,所以我想做的是,无论costs数组中有多少个元素,我都只想绘制100个数据点,并尽可能均匀地分布。例如。如果有10个元素,则绘制所有10个元素。如果有100个元素,则绘制所有100个元素。大于100的任何点,仅绘制100个等间距分布的数据点。例如。每隔200个数据点绘制一次。使用500,每5个元素绘制一次。即使是102个元素,也只能绘制100个数据点,并尽可能地隔开。我希望这是有道理的。这可能吗?请注意,我仅包含与问题最相关的部分代码。哪里有带点# ......的注释,我只是表示这里有代码,但由于它与问题无关,所以没有包括在内。

在此先感谢您的帮助。


 def simple_1_layer_classification_NN(self, dataset_input_matrix, output_data_labels, input_dimension, epochs, activation_func='sigmoid', learning_rate=0.2, cost_func='squared_error'):
        # ...............
        cost = float()
        costs = []
        # ................

        # We perform the training based on the number of epochs specified
        for i in range(epochs):

                 #....................
                 # Cost: the cost function to calculate the prediction error margin
                 cost = chosen_cost_func(pred, output_data_labels[ri])

                costs.append(cost)
        #.....................

    plt.plot(costs)
    plt.show()

1 个答案:

答案 0 :(得分:2)

x = xdata[::10]
x = ydata[::10]
plt.plot(x, y)
plt.show()

它将在xdata,ydata中绘制出每10个点

以您的情况

x = None
y = None
l = len(xdata) 
if l < 100:
    x = xdata[::]
    y = ydata[::]
elif l < 200:
    x = xdata[::2]
    y = ydata[::2]
elif l < 500:
    x = xdata[::5]
    y = ydata[::5]

更新

不确定是否相关,但是您也可以尝试使用自定义步幅。它将指向相同的数据缓冲区,但是使用不同的元数据来逐步处理数据。

要查看的函数是https://docs.scipy.org/doc/numpy/reference/generated/numpy.lib.stride_tricks.as_strided.html#numpy.lib.stride_tricks.as_strided,它在stride_tricks中是有原因的-您会花一些时间来习惯它。将writeable设置为False,这样就不会破坏原始数据。简单的例子是here