def test_centroid_singleton(): x = np.r_[0] mfx = np.r_[0] assert_allclose(np.r_[0], fuzz.centroid(x, mfx)) x = np.r_[3] mfx = np.r_[0.5] assert_allclose(x, fuzz.centroid(x, mfx))
def test_centroid(): def helper_centroid(mean=0, sigma=1): x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, mean, sigma) assert_allclose(mean, fuzz.centroid(x, gmf), atol=1e-1) return None def helper_dcentroid(mean=0, sigma=1, dc=0): x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, mean, sigma) assert_allclose(mean, fuzz.dcentroid(x, gmf, dc), atol=1e-1) assert_allclose(fuzz.centroid(x, gmf), fuzz.dcentroid(x, gmf, 0)) return None for mean in np.arange(-5, 5, 2): for sigma in range(1, 3): helper_centroid(mean, sigma) for differential_centroid in 42 * (np.arange(11) - 5): helper_dcentroid(mean, sigma, differential_centroid) # Test with ends @ zero, to evaluate special cases in new defuzz method x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, 0, np.pi) gmf[0] = 0 gmf[-1] = 0 assert_allclose(0, fuzz.centroid(x, gmf), atol=1e-8)
def helper_dcentroid(mean=0, sigma=1, dc=0): x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, mean, sigma) assert_allclose(mean, fuzz.dcentroid(x, gmf, dc), atol=1e-3) assert_allclose(fuzz.centroid(x, gmf), fuzz.dcentroid(x, gmf, 0)) return None
def helper_dcentroid(mean=0, sigma=1, dc=0): x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, mean, sigma) assert_allclose(mean, fuzz.dcentroid(x, gmf, dc), atol=1e-1) assert_allclose(fuzz.centroid(x, gmf), fuzz.dcentroid(x, gmf, 0)) return None
def test_centroid(): def helper_centroid(mean=0, sigma=1): x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, mean, sigma) assert_allclose(mean, fuzz.centroid(x, gmf), atol=1e-2) return None def helper_dcentroid(mean=0, sigma=1, dc=0): x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, mean, sigma) assert_allclose(mean, fuzz.dcentroid(x, gmf, dc), atol=1e-2) assert_allclose(fuzz.centroid(x, gmf), fuzz.dcentroid(x, gmf, 0)) return None for mean in np.arange(-5, 5, 2): for sigma in range(1, 3): helper_centroid(mean, sigma) for differential_centroid in 42 * (np.arange(11) - 5): helper_dcentroid(mean, sigma, differential_centroid) # Test with ends @ zero, to evaluate special cases in new defuzz method x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, 0, np.pi) gmf[0] = 0 gmf[-1] = 0 assert_allclose(0, fuzz.centroid(x, gmf), atol=1e-8)
def visualise_all(x, y_list, titles, ncols=3): ''' Just display the given plot-data on a grid of separate graphs. Also show the centroid as a vertical red line. ''' nrows = np.int(np.ceil(len(y_list) / ncols)) fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(8, 9)) fig.tight_layout() fig.subplots_adjust(bottom=-.25) for i, p in enumerate(y_list): r, c = divmod(i, ncols) axes[r][c].plot(x, p) cog = skfuzzy.centroid(x, p) axes[r][c].axvline(x=cog, color='red', linestyle='--') axes[r][c].set_title(titles[i]) axes[r][c].set_ylim([-0.05, 1.05]) # so all have the same (0,1) y-axis
def helper_centroid(mean=0, sigma=1): x = np.arange(21) - 10 gmf = fuzz.gaussmf(x, mean, sigma) assert_allclose(mean, fuzz.centroid(x, gmf), atol=1e-2) return None