GVKun编程网logo

如何在numpy数组中逐轴查找最小值/最大值(numpy寻找最大值的位置)

34

针对如何在numpy数组中逐轴查找最小值/最大值和numpy寻找最大值的位置这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展4DNumPy数组中每个2D矩阵的最大值、C++如何在n个元素的一

针对如何在numpy数组中逐轴查找最小值/最大值numpy寻找最大值的位置这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展4D NumPy数组中每个2D矩阵的最大值、C ++如何在n个元素的一维数组中查找最小值和最大值?、java数组回顾---线性查找最大值最小值---二分查找、NumPy数组中滑动窗口中的最大值等相关知识,希望可以帮助到你。

本文目录一览:

如何在numpy数组中逐轴查找最小值/最大值(numpy寻找最大值的位置)

如何在numpy数组中逐轴查找最小值/最大值(numpy寻找最大值的位置)

我有一个NumPy数组,其形状为(3,1,2)

A=np.array([[[1,4]],            [[2,5]],            [[3,2]]]).

我想在每一列中获取最小值。

在这种情况下,它们是1和2。我尝试使用np.amin它,但是它返回一个数组,这不是我想要的。有没有一种方法可以在不使用循环的情况下仅用一两行python代码就能做到这一点?

答案1

小编典典

您可以指定axis作为numpy.min功能的参数。

In [10]: A=np.array([[[1,4]],                [[2,5]],                [[3,6]]])In [11]: np.min(A)Out[11]: 1In [12]: np.min(A, axis=0)Out[12]: array([[1, 4]])In [13]: np.min(A, axis=1)Out[13]: array([[1, 4],       [2, 5],       [3, 6]])In [14]: np.min(A, axis=2)Out[14]: array([[1],       [2],       [3]])

4D NumPy数组中每个2D矩阵的最大值

4D NumPy数组中每个2D矩阵的最大值

我认为这个问题是对axis参数如何工作的误解。对于大多数这些聚合方法,axis关键字是要沿 投影的一个(或多个)轴,即,这些轴已从结果中“删除”。因此,在这种情况下,您想调用类似的内容:

In [7]: B.max((0,2,3))                                                                                                            
Out[7]: array([0.5625,1.25,0.625 ])

min

相同
In [8]: B.min((0,3))                                                                                                            
Out[8]: array([0.5,0.5,0.5])

或者您可以直接调用numpy方法

In [9]: np.max(B,axis=(0,3))                                                                                                   
Out[9]: array([0.5625,0.625 ])
,

您可以将其重塑为所需子数组的二维数组,然后将max或min函数应用于每个子数组:

>>> B.reshape(3,4)
array([[0.5,0.5625,0.5625],[1.25,0.6875],[0.5625,0.625,0.5625]])
>>> B.reshape(3,4).max(axis=1)
array([0.5625,0.625 ])
>>> B.reshape(3,4).min(axis=1)
array([0.5,0.5])

C ++如何在n个元素的一维数组中查找最小值和最大值?

C ++如何在n个元素的一维数组中查找最小值和最大值?

您错过了算法中的第一个值永远不会设置为最小值或最大值。 假设所有数字都是正数

int main()
{
    int n;
    cin>>n;
    int ma=0,mi=2147483647;
    int num[n];
    for(int i=0;i<n;i++)
        {
            cin>>num[i];
            if(num[i] > ma)
                ma = num[i];
            if(num[i] < mi)
                mi = num[i];
        }


    cout<<mi<<endl;
    cout<<ma;
}
,

我会尝试以下代码:

std ::vector < int > v (n);
std ::copy_n (std ::istream_iterator < int,char > (cin),begin (v),n);
auto const r ((std ::minmax_element) (begin (v),end (v)));
return std ::cout << * r .first << '\n' << * r .second ? EXIT_SUCCESS: EXIT_FAILURE;

java数组回顾---线性查找最大值最小值---二分查找

java数组回顾---线性查找最大值最小值---二分查找

import java.util.Scanner;

 

public class ArrayDemo {

  public static void main(String []args) {

    //-------------------------------------------------------

    //线性查找

    int [] num ={10,20,30,40,50};

    Scanner input1 = new Scanner(System.in);

    System.out.println("请输入要查找的数(10,20,30,40,50):");

    int inp = input1.nextInt();

    input1.close();

    for(int i = 0;i<num.length;i++) {

      if (inp == num[i]) {

        System.out.println("所查数下标为:"+i);

      }else {

        if(i==num.length-1 ) {

          System.out.println("-1");

        }

      }

    }

    //-------------------------------------------------------

   

    //查找数组最大值,最小值

    int[] maxMin = new int[] {20,60,80,70,30,10,50};

    System.out.println("数组为(20,60,80,70,30,10,50),求最大值和最小值:");

    //方法一(冒泡排序):

    int temp=0;

    for(int i = 0;i<maxMin.length-1;i++) {

      if(maxMin[i]>maxMin[i+1]) {

        temp = maxMin[i+1];

        maxMin[i+1] = maxMin[i];

        maxMin[i] = temp;

      }

    }

    System.out.println("最大值为:"+maxMin[6]);

    for(int i = 0;i<maxMin.length-1;i++) {

      if(maxMin[i]<maxMin[i+1]) {

        temp = maxMin[i+1];

        maxMin[i+1] = maxMin[i];

        maxMin[i] = temp;

      }

    }

    //方法二:

    int max = maxMin[0];

    for(int i = 1;i<maxMin.length-1;i++) {

      if(maxMin[i]>max) {

        max = maxMin[i];

      }

    }

    System.out.println("最大值为:"+max);

    int min = maxMin[0];

    for(int i = 1;i<maxMin.length-1;i++) {

      if(maxMin[i]<min) {

        min = maxMin[i];

      }

    }

    System.out.println("最小值为:"+min);

 

    //--------------------------------------------------------

    //二分查找

    int[] BinarySearch = new int[] {10,20,30,40,70,80,90,100};

    Scanner input2 = new Scanner(System.in);

    System.out.println("请输入要查找的数(10,20,30,40,70,80,90,100):");

    input2.close();

    int start;

    int end;

    int middle;

    int index = -1;//保存找到书所在下标

    start = 0;//保存起始下标

    end =  BinarySearch.length-1;//保存终点下标

    while(start <=end) {

      middle = (start+end)/2;//找到中间元素 对应的值

      if(num2 == BinarySearch[middle]) {

        index = middle+1;

        break;

      }

      if(num2 > BinarySearch[middle]) {//如果是大于中间的数

        start = middle+1;//起始下标改为中间数的下一个数

      }

      if(num2 < BinarySearch[middle]){

        end = middle-1;//终点下标改为中间数的上一个数

      }

 

    }

 

    if(index == -1){

      System.out.println("没查到");

    }

    else{

      System.out.println("查到了,位置在第"+index+"位");

    }

  }

}

 

NumPy数组中滑动窗口中的最大值

NumPy数组中滑动窗口中的最大值

我想创建一个数组,其中包含max()通过给定numpy数组移动的窗口的所有es。很抱歉,这听起来令人困惑。我举一个例子。输入:

[ 6,4,8,7,1,4,3,5,7,2,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ]

我的窗口宽度为5的输出应为:

[     8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,7,7,9,9,9,9     ]

每个数字应为输入数组宽度5的子数组的最大值:

[ 6,4,8,7,1,4,3,5,7,2,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ]  \       /                 \       /   \     /                   \     /    \   /                     \   /     \ /                       \ /[     8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,7,7,9,9,9,9     ]

我没有在numpy中找到一个开箱即用的函数来做到这一点(但是如果有一个,我不会感到惊讶;我并不是一直以numpy开发人员的想法来思考)。我考虑过为输入创建偏移的2D版本:

[ [ 6,4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1 ]  [ 4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9 ]  [ 8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4 ]  [ 7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3 ]  [ 1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ] ]

然后,我可以np.max(input, 0)对此进行申请,并得到我的结果。但这对我来说似乎不太有效,因为数组和窗口宽度都可能很大(>
1000000个条目和> 100000个窗口宽度)。数据将因窗口宽度而增加或减少。

我也考虑过np.convolve()以某种方式使用,但无法找到一种方法来实现我的目标。

任何想法如何有效地做到这一点?

答案1

小编典典

Pandas对Series和DataFrame都有滚动方法,可以在这里使用:

import pandas as pdlst = [6,4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2]lst1 = pd.Series(lst).rolling(5).max().dropna().tolist()# [8.0, 8.0, 8.0, 7.0, 7.0, 8.0, 8.0, 8.0, 8.0, 8.0, 6.0, 6.0, 6.0, 6.0, 6.0, 7.0, 7.0, 9.0, 9.0, 9.0, 9.0]

为了保持一致,您可以将的每个元素强制转换lst1int

[int(x) for x in lst1]# [8, 8, 8, 7, 7, 8, 8, 8, 8, 8, 6, 6, 6, 6, 6, 7, 7, 9, 9, 9, 9]

我们今天的关于如何在numpy数组中逐轴查找最小值/最大值numpy寻找最大值的位置的分享就到这里,谢谢您的阅读,如果想了解更多关于4D NumPy数组中每个2D矩阵的最大值、C ++如何在n个元素的一维数组中查找最小值和最大值?、java数组回顾---线性查找最大值最小值---二分查找、NumPy数组中滑动窗口中的最大值的相关信息,可以在本站进行搜索。

本文标签: