From 5aa40ce1fc882fab16b15a4022e4ecf30bcc4f9c Mon Sep 17 00:00:00 2001 From: "Mads M. Pedersen" <mmpe@dtu.dk> Date: Mon, 22 May 2017 14:05:04 +0200 Subject: [PATCH] small updates --- wetb/fatigue_tools/fatigue.py | 19 ++++++------------- wetb/signal/__init__.py | 3 ++- wetb/signal/filters/_despike.py | 4 ++-- wetb/wind/__init__.py | 2 +- 4 files changed, 11 insertions(+), 17 deletions(-) diff --git a/wetb/fatigue_tools/fatigue.py b/wetb/fatigue_tools/fatigue.py index e98aaf7..0aa8713 100644 --- a/wetb/fatigue_tools/fatigue.py +++ b/wetb/fatigue_tools/fatigue.py @@ -14,13 +14,11 @@ or - 'rainflow_astm' (based on the c-implementation by Adam Nieslony found at the MATLAB Central File Exchange http://www.mathworks.com/matlabcentral/fileexchange/3026) ''' -from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals - +from __future__ import absolute_import from future import standard_library - standard_library.install_aliases() import numpy as np from wetb.fatigue_tools.rainflowcounting import rainflowcount @@ -96,7 +94,7 @@ def eq_load_and_cycles(signals, no_bins=46, m=[3, 4, 6, 8, 10, 12], neq=[10 ** 6 eq_loads : array-like List of lists of equivalent loads for the corresponding equivalent number(s) and Wohler exponents cycles : array_like - 2d array with shape = (no_ampl_bins, no_mean_bins) + 2d array with shape = (no_ampl_bins, 1) ampl_bin_mean : array_like mean amplitude of the bins ampl_bin_edges @@ -106,8 +104,7 @@ def eq_load_and_cycles(signals, no_bins=46, m=[3, 4, 6, 8, 10, 12], neq=[10 ** 6 if 0: #to be similar to windap ampl_bin_mean = (ampl_bin_edges[:-1] + ampl_bin_edges[1:]) / 2 cycles, ampl_bin_mean = cycles.flatten(), ampl_bin_mean.flatten() - mask = cycles>0 - eq_loads = [[((np.sum(cycles[mask] * ampl_bin_mean[mask] ** _m) / _neq) ** (1. / _m)) for _m in np.atleast_1d(m)] for _neq in np.atleast_1d(neq)] + eq_loads = [[((np.nansum(cycles * ampl_bin_mean ** _m) / _neq) ** (1. / _m)) for _m in np.atleast_1d(m)] for _neq in np.atleast_1d(neq)] return eq_loads, cycles, ampl_bin_mean, ampl_bin_edges @@ -150,8 +147,7 @@ def cycle_matrix(signals, ampl_bins=10, mean_bins=10, rainflow_func=rainflow_win >>> cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = cycle_matrix(signal) >>> cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = cycle_matrix([(.4, signal), (.6,signal)]) """ - if len(signals)==0: - print ("here") + if isinstance(signals[0], tuple): weights, ampls, means = np.array([(np.zeros_like(ampl)+weight,ampl,mean) for weight, signal in signals for ampl,mean in rainflow_func(signal[:]).T], dtype=np.float64).T else: @@ -162,12 +158,9 @@ def cycle_matrix(signals, ampl_bins=10, mean_bins=10, rainflow_func=rainflow_win cycles, ampl_edges, mean_edges = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights) ampl_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * ampls)[0] + ampl_bin_mean = np.nanmean(ampl_bin_sum / np.where(cycles,cycles,np.nan),1) mean_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * means)[0] - import warnings - with warnings.catch_warnings(): - warnings.simplefilter("ignore", category=RuntimeWarning) - ampl_bin_mean = np.nanmean(ampl_bin_sum / np.where(cycles,cycles,np.nan),1) - mean_bin_mean = np.nanmean(mean_bin_sum / np.where(cycles, cycles, np.nan), 1) + mean_bin_mean = np.nanmean(mean_bin_sum / np.where(cycles, cycles, np.nan), 1) cycles = cycles / 2 # to get full cycles return cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges diff --git a/wetb/signal/__init__.py b/wetb/signal/__init__.py index 42d8da6..57d5e28 100644 --- a/wetb/signal/__init__.py +++ b/wetb/signal/__init__.py @@ -3,7 +3,8 @@ d = None d = dir() from .interpolation import interpolate - +from .fit import * +from .fix import * __all__ = [m for m in set(dir()) - set(d)] diff --git a/wetb/signal/filters/_despike.py b/wetb/signal/filters/_despike.py index bdeb845..0a23195 100644 --- a/wetb/signal/filters/_despike.py +++ b/wetb/signal/filters/_despike.py @@ -33,8 +33,8 @@ def thresshold_finder(data, thresshold, plt=None): def univeral_thresshold_finder(data, variation='mad', plt=None): ## Three variation measures in decreasing order of sensitivity to outliers - variation = {'std': np.sqrt(np.mean((data - np.mean(data)) ** 2)), # standard deviation - 'abs': np.mean(np.abs(data - np.mean(data))), # mean abs deviation + variation = {'std': np.nanstd(data), # standard deviation + 'abs': np.nanmean(np.abs(data - np.nanmean(data))), # mean abs deviation 'mad': nanmedian(np.abs(data - nanmedian(data))) # median abs deviation (mad) }.get(variation, variation) diff --git a/wetb/wind/__init__.py b/wetb/wind/__init__.py index ae17e9a..36e41c9 100644 --- a/wetb/wind/__init__.py +++ b/wetb/wind/__init__.py @@ -1 +1 @@ -from .turbulence import * \ No newline at end of file +from .turbulence import * -- GitLab