针对如何在numpy数组中逐轴查找最小值/最大值和numpy寻找最大值的位置这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展4DNumPy数组中每个2D矩阵的最大值、C++如何在n个元素的一
针对如何在numpy数组中逐轴查找最小值/最大值和numpy寻找最大值的位置这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展4D NumPy数组中每个2D矩阵的最大值、C ++如何在n个元素的一维数组中查找最小值和最大值?、java数组回顾---线性查找最大值最小值---二分查找、NumPy数组中滑动窗口中的最大值等相关知识,希望可以帮助到你。
本文目录一览:- 如何在numpy数组中逐轴查找最小值/最大值(numpy寻找最大值的位置)
- 4D NumPy数组中每个2D矩阵的最大值
- C ++如何在n个元素的一维数组中查找最小值和最大值?
- java数组回顾---线性查找最大值最小值---二分查找
- 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矩阵的最大值
我认为这个问题是对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个元素的一维数组中查找最小值和最大值?
您错过了算法中的第一个值永远不会设置为最小值或最大值。 假设所有数字都是正数
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数组回顾---线性查找最大值最小值---二分查找
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数组中滑动窗口中的最大值
我想创建一个数组,其中包含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]
为了保持一致,您可以将的每个元素强制转换lst1
为int
:
[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数组中滑动窗口中的最大值的相关信息,可以在本站进行搜索。
本文标签: