raptor96 raptor96 - 6 months ago 15
Python Question

Finding local minima from set of points in octave/python

I have a file with set of points like

652 653 655...
and when plotted looks like this.
enter image description here

I want to detect the local minima (in this case, approximately at, 100, 250, 370, 500, etc but not in the aberrations in between of the plot). How can this be done using Python/Octave?

My Data is something like this

762 659 658 658 659 660 660 660 660 658 657 656 654 652 650 649 648 648 647 646 645 645 645 645 645 644 644 643 641 640 638 637 635 634 634 634 635 637 640 641 641 640 637 633 631 631 633 639 648 659 672 686 702 718 735 751 765 777 787 794 800 804 805 805 806 808 808 807 806 803 801 799 796 793 788 784 781 782 784 785 785 783 780 775 770 765 758 749 737 726 716 708 703 699 697 695 694 693 692 693 692 694 697 701 704 709 713 715 716 716 717 717 715 712 708 703 698 694 690 689 688 687 685 684 682 681 680 678 676 674 672 669 664 661 659 658 660 661 662 662 661 660 659 658 657 655 654 655 658 660 661 661 659 658 658 657 657 655 654 651 650 648 646 645 646 647 647 648 649 651 652 654 655 656 657 658 659 658 657 658 661 667 676 689 704 719 736 752 767 782 793 801 808 812 816 817 818 818 816 813 810 808 804 802 799 798 796 795 792 790 786 784 783 782 781 778 775 770 763 754 744 732 721 711 703 697 692 689 686 686 687 690 693 694 695 696 696 695 694 692 690 689 689 689 690 690 690 689 688 686 683 681 678 674 670 667 663 661 659 657 657 657 658 659 660 661 662 661 660 658 657 656 656 656 656 656 657 658 659 659 660 660 661 661 661 661 661 660 660 659 659 659 659 659 659 660 660 659 659 658 657 656 656 655 655 655 655 653 651 650 649 649 649 650 650 652 657 665 677 692 708 725 742 758 774 787 800 809 816 822 828 833 836 838 838 836 834 832 828 825 823 820 819 817 816 816 814 812 809 808 809 808 806 805 802 797 792 784 774 763 752 741 731 723 716 711 706 702 702 705 710 715 718 721 725 728 730 731 731 730 729 726 722 718 714 711 708 705 702 698 697 696 696 695 695 694 692 692 691 689 688 688 688 686 685 685 683 682 681 680 678 678 677 676 674 672 671 670 669 667 666 666 665 664 665 668 671 673 674 674 675 675 674 671 668 666 663 661 659 658 656 654 653 652 652 654 657 661 665 669 672 674 677 678 679 680 682 688 696 708 721 734 749 762 774 786 797 806 812 817 821 825 828 829 829 829 828 827 825 824 820 817 814 810 807 804 801 799 796 793 790 786 784 781 775 768 759 748 736 724 713 703 696 691 688 687 687 688 689 690 690 689 690 691 691 691 691 689 687 687 688 689 689 689 687 686 686 684 681 677 673 669 667 664 662 660 658 657 656 657 657 657 658 657 656 655 654 654 653 652 652 652 651 651 650 648 647 647 647 647 648 648 648 647 647 646 646 647 648 648 646 645 646 646 646 645 644 643 643 643 644 645 646 647 647 646 645 643 640 638 636 635 633 633 635 641 650 661 673 687 702 718 734 750 764 777 788 799 807 815 820 824 826 825 823 820 815 810 804 799 795 793 790 787 785 783 781 779 777 773 770 767 762 756 749 742 733 722 714 707 701 698 696 694 694 694 694 695 695 695 695 696 697 697 697 696 696 695 693 692 691 689 687 687 686 685 684 683 682 680 680 679 677 674 671 669 667 665 662 661 659 659 659 660 663 665 666 666 667 667 666 665 663 661 659 657 654 651 650 651 652 652 653 653 654 653 652 651 649 648 646 643 641 639 638 637 636 636 637 639 640 640 642 643 644 646 646 647 648 652 657 667 679 695 712 730 750 767 783 797 807 815 821 825 828 830 831 832 831 830 830 828 825 823 820 817 814 810 806 803 801 800 799 796 793 790 787 783 777 770 761 750 738 728 720 713 708 706 704 704 705 707 709 711 713 715 718 720 722 723 723 722 720 719 718 717 714 711 708 705 704 703 702 701 699 696 694 693 695 696 697 697 697 696 695 694 692 689 685 682 680 679 676 673 671 670 669 668 670 672 673 675 677 679 680 680 680 680 679 679 678 677 675 674 673 673 673 675 676 676 676 676 677 678 680 681 683 685 687 687 686 684 683 681 680 679 679 681 685 691 701 713 728 744 761 779 796 810 822 831 840 846 850 851 851 851 849 847 844 841 837 833 831 829 826 822 820 819 820 821 823 823 823 823 822 819 814 806 799 789 779 767 758 749 740 734 728 725 724 726 727 730 734 737 741 743 745 747 747 746 744 741 738 736 733 729 725 723 721 719 717 715 711 709 707 705 703 699 694 690 688 687 686 685 686 686 687 687 687 686 686 684 683 681 681 680 680 681 683 686 690 692 693 693 692 691 691 690 688 687 685 684 683 681 680 679 679 680 681 682 682 684 686 687 688 688 688 688 688 686 685 685 684 683 682 681 679 678 678 679 680 683 686 691 699 712 728 746 762 778 793 807 819 830 840 850 857 863 866 870 872 873 874 873 873 871 869 866 862 857 852 848 844 840 837 836 836 836 835 833 828 822 814 803 791 778 767 756 748 744 742 743 746 748 751 754 756 757 759 761 763 764 764 764 764 765 764 763 761 758 755 751 747 742 738 736 735 735 735 734 734 734 733 733 733 732 731 728 725 721 716 710 708 708 709 710 711 711 712 713 712 711 710 709 707 706 705 706 708 710 711 711 710 711 711 713 714 714 712 709 707 705 704 703 702 699 696 693 692 692 693 693 692 692 691 690 690 689 688 688 690 695 704 717 732 749 767 784 801 816 828 839 847 855 860 863 866 869 870 870 869 867 864 861 858 855 852 849 847 845 844 844 843 843 842 839 835 829 823 814 804 792 781 770 761 754 750 747 747 747 747 749 750 750 749 748 749 749 749 750 749 747 746 744 743 742 740 738 736 732 729 725 722 719 717 716 716 715 715 714 713 713 711 710 710 710 709 708 708 708 708 708 710 710 711 712 711 710 709 708 707 707 707 707 705 705 706 706 708 709 709 709 709 708 708 709 709 711 711 713 713 714 715 714 714 713 712 711 711 712 713 714 716 717 717 717 716 717 719 723 726 730 736 746 758 774 790 806 821 836 849 860 871 881 888 894 898 900 900 899 895 890 886 881 875 870 866 865 864 863 862 861 861 859 859 857 855 851 847 842 836 828 819 808 796 782 770 759 752 747 745 743 744 745 747 749 751 753 753 753 753 754 754 753 750 748 746 742 738 734 731 727 724 722 721 721 721 724 726 727 727 726 725 723 720 717 713 710 708 705 704 703 702 700 700 700 700 700 699 697 696 697 696 695 693 692 690 688 686 685 684 683 683 681 679 677 677 677 676 676 674 674 672 671 669 668 667 666 665 663 663 665 667 669 671 674 675 676 676 675 676 680 690 701 709 714 722 734 751 769 785 801 816 830 843 853 860 865 868 871 871 870 870 868 866 863 860 857 854 852 850 849 848 846 843 840 837 835 834 833 831 827 821 814 805 794 781 769 759 751 745 742 739 737 735 735 737 740 742 746 748 749 750 752 753 754 755 756 756 756 756 754 752 749 746 742 739 736 732 729 726 724 723 724 725 727 729 729 729 729 730 730 730 728 726 726 725 724 722 720 718 717 717 718 718 719 720 721 722 722 721 720 718 718 718 717 717 718 719 719 720 719 718 717 716 714 712 710 707 704 703 703 702 701 701 700 700 702 705 709 717 728 742 758 776 793 811 828 843 855 865 873 879 883 885 885 883 880 876 872 869 866 865 864 863 862 862 862 861 859 858 858 856 852 847 840 831 821 810 798 787 778 769 763 759 757 757 757 758 760 761 763 764 765 767 767 767 766 764 763 761 759 758 757 756 756 755 753 752 750 748 746 744 741 738 735 733 732 731 730 729 728 726 723 721 719 717 717 717 717 718 718 718 717 715 713 710 706 703 700 697 696 695 694 694 694 695 696 696 697 697 697 698

Answer

I show here one solution with peakdet which is based on http://billauer.co.il/peakdet.html <- (you shoud read this page)

set (0, "defaultlinelinewidth", 2)
d = [your data above];
delta = 100;
[~, MINTAB] = peakdet (d', delta);
plot (d, ";;", MINTAB, d(MINTAB), "o")
grid on
print out.png

data with minimas

The C++ peakdet.cc is also intended to be used in GNU Octave. You can compile it with "make" (which uses mkoctfile) into an OCT file and use this in Octave like a regulär function. Remember this if speed gets a problem (peakdet.m is much slower than the compiled version)