我认为指出我的问题最简单,一般情况很难解释.

说我有一个矩阵

a with dimensions NxMxT,

人们可以将T视为时间维度(使问题更容易).设(n,m)为通过NxM的指数.我可以调用(n,m)状态空间标识符.然后我需要找到python / scipy等价的

for each (n,m):

find a*(n,m) = min(a(n,m,:) s.t. a*(n,m) > a(n,m,T)

也就是说,找到仍然高于最后一个(在时间维度中)观察的最小状态空间值 – 对于整个状态空间.

我的第一个尝试是首先解决内部问题(找到一个高于[…, – 1]的):

aHigherThanLast = a[ a > a[...,-1][...,newaxis] ]

然后我想在每个(n,m)中找到所有这些中最小的.不幸的是,aHigherThanLast现在包含所有这些值的一维数组,因此我不再具有(n,m)对应关系.什么是更好的方法呢?

作为一个额外的问题:状态空间是可变的,它也可能是3维或更多维度(NxMxKx …),我不能硬编码.任何一种

for (n,m,t) in nditer(a):

不可行.

非常感谢!

/编辑:

a = array([[[[[[[[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.]]]],

[[[[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.]]]]],

[[[[[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.]]]],

[[[[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.],

[ 0., 2., 1.]]]]]]]])

# a.shape = (1L, 1L, 2L, 2L, 1L, 1L, 10L, 3L). so in this case, T = 3.

# expected output would be the sort of

# b.shape = (1L, 1L, 2L, 2L, 1L, 1L, 10L), which solves

> b [a,b,c,d,e,f,g]> a [a,b,c,d,e,f,g,-1](b高于最新观察值)

> i中没有任何元素可以满足两者

– a [a,b,c,d,e,f,g,t]>一个[A,B,C,d,E,F,G,-1]

– a [a,b,c,d,e,f,g,t]< b [a,b,c,d,e,f,g](b是高于最新观测值的最小元素) 所以,假设前一个数组是一个简单的堆栈,如果[0,2,1]沿着最后一个观察,我会期待

b = ones((1,1,2,2,1,1,10))*2

然而,

– 如果在某些(a,b,c,d,e,f,g)中,不仅有{0,1,2}的值,还有{3}的值,那么我仍然希望2 (因为i = {2,3}中的较小者满足i> 1.

– 如果在某些(a,b,c,d,e,f,g)中只有值{0,1,3},我会想要3,因为i = 3将是满足i的最小数字> 1.

希望能把它清理一下吗?

/ EDIT2:

非常感谢答案,它有效.如果我想要相反的话,我会如何调整它,即较小的那些中最大的?我没有试图通过那个复杂的索引逻辑,所以我(仅)更改前三行的尝试没有成功:

b = sort(a[...,:-1], axis=-1)

b = b[...,::-1]

mask = b < a[..., -1:]

index = argmax(mask, axis=-1)

indices = tuple([arange(j) for j in a.shape[:-1]])

indices = meshgrid(*indices, indexing='ij', sparse=True)

indices.append(index)

indices = tuple(indices)

a[indices]

另外,我的第二次尝试[…,:: – 1] [指数]也没有成果.

最佳答案 我认为E先生走在正确的轨道上.你绝对可以在没有上一次值的情况下对数组进行排序:

b = np.sort(a[..., :-1], axis=-1)

你现在理想地使用`np.searchsorted来查找第一个项大于结束值的位置,但不幸的是np.searchsorted仅适用于平顶数组,因此我们必须做更多的工作,比如创建一个布尔掩码,然后找到使用np.argmax的第一个True:

mask = b > a[..., -1:]

index = np.argmax(mask, axis=-1)

你现在有了索引,要提取实际值,你需要做一些索引魔术:

indices = tuple([np.arange(j) for j in b.shape[:-1]])

indices = np.meshgrid(*indices, indexing='ij', sparse=True)

indices.append(index)

indices = tuple(indices)

你现在终于可以做到了:

>>> b[indices]

array([[[[[[[ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]]],

[[[ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]]]],

[[[[ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]]],

[[[ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]]]]]]])

>>> b[indices].shape

(1L, 1L, 2L, 2L, 1L, 1L, 10L)

要在较小的那些中获得最大的,你可以做类似的事情:

mask = b >= a[..., -1:]

index = np.argmax(mask, axis=-1) - 1

即,在较小的那些中最大的项目是在相等或更大的项目中最小的项目.第二种情况更清楚地表明,如果没有满足条件的项目,这种方法会产生垃圾结果.在第二种情况下,当发生这种情况时,您将获得一个-1的索引,因此您可以检查结果是否有效执行np.any(index == -1).

如果通过执行第一种情况无法满足条件,则可以将索引设置为-1

mask = b > a[..., -1:]

wrong = np.all(~mask, axis=-1)

index = np.argmax(mask, axis=-1)

index[wrong] = -1

python找出矩阵中的最大值_Python / Scipy:找到矩阵的“有界”最小值/最大值相关推荐

  1. Python找出列表中出现次数最多的元素三种方式

    通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...

  2. python找出列表中所以相同元素的索引

    在 Python 中可以使用 enumerate() 函数来找出列表中所有相同元素的索引.enumerate() 函数返回的是一个包含元素索引和元素值的元组,可以在循环中使用.示例如下: my_lis ...

  3. Python找出序列中出现最多的元素

    运用场景 有时候我们需要统计一个序列中出现最多或者次多的元素,或者是给你一段文字,这段文字中出现最多的词是什么,以及每个词出现的次数,这个在写代码的初级篇大家都会遇到. 一般的做法,我肯定会用一个字典 ...

  4. python 找出列表中出现最多的元素_利用Python找出序列中出现最多的元素示例代码...

    前言 Python包含6种内置的序列:列表.元组.字符串 .Unicode字符串.buffer对象.xrange对象.在序列中的每个元素都有自己的编号.列表与元组的区别在于,列表是可以修改,而组元不可 ...

  5. 用Python找出数组中出现次数超过一半的数

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 计数+比较 不考虑效率,采用最简单的办法,遍历数组,使用 List 的 count() 方法统计元素出现的次数: def more_th ...

  6. python找出列表中最长/短的字符串及他们的长度、下标

      列表中包含多个字符串,当需要找出最长/短字符串的长度.最长/短字符串或者他们的下标时,此代码都能搞定!欢迎 star ^ ^ 代码如下: strs = ["flower", & ...

  7. python找出字符串中的最长回文串子序列

    回文串,即: nums = 'aba' print(nums == nums[::-1]) # True 反转该序列后和之前元素相等 这里我们需要找出给定字符串里的最长回文串,即: nums = 'a ...

  8. python找出图中所有闭合环_求图中的所有闭合环

    NetworkX是一个流行的Python包,用于处理许多科学Python发行版中包含的图形.它包括一些计算图圈的算法.尤其是,^{}会回答你的问题.在 这种方法的一个警告是必须将图转换为有向图.这意味 ...

  9. python找出图中所有闭合环_这可能是史上最全的 Python 算法集(建议收藏)

    △蓝字可关注并标星 -数据分析展示就用DataHunter- 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...

  10. python找出录取率最高的年份_Python分析42年高考数据,告诉你高考为什么这么难?...

    不同省份的985和211录取率有着比较明显的差距,12个省份的985录取率低于1.5%,安徽,河南,江苏和贵州更是低于1.2% 大数据文摘授权转载自数据森麟 作者:徐麟 对于已经工作的"上班 ...

最新文章

  1. R-Bioconductor安装
  2. elasticsearch:7.9.3 docker 开启日志
  3. metabase 以链接或图片查看_Python下载微信公众号文章内的图片
  4. PHP中使用RabiitMQ---各项参数的使用方法
  5. 二叉树遍历(已知先序和中序)
  6. [BUUCTF-pwn]——xman_2019_format
  7. SAP成都研究院Sunshine:我的C4C实习感受和保研之路
  8. ubuntu 手动安装mysql
  9. mysql数据库面试总结
  10. java判断long 大于0,JAVA的一道习题:找出五个大于Long.MAX_VALUE的素数
  11. 一点排位就安全异常退出_吃鸡战场排位连跪最好的处理方式并不是继续排位,大神一般这样做!...
  12. 牛客:阶乘结果换算进制后得到数字的尾部有几个0
  13. C语言小游戏之贪吃蛇
  14. 电子设计大赛简易自动入库小车设计
  15. PCIe总线协议概述
  16. 一般试卷的纸张大小是多少_试卷标准字体大小是多少 考试试卷标准字体格式...
  17. 环境篇:CM+CDH6.3.2环境搭建(全网最全)
  18. 使用C#在VS窗体应用中调起一个选择框,完成图片替换
  19. java数据类型_Java数据类型
  20. 【西门子】S7-PLCSIM Advance_V2/V3, Error Code: -30,LicenseNotFound /NetGroup Packet Filter Driver (NPF)

热门文章

  1. s3 java_java – 我们可以迭代Amazon S3中的完整对象集
  2. 基于JAVA+Spring+MYSQL的公共自行车管理系统
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上商城系统
  4. linux$1和$ 1 区别,linux 关于$0$1$n$$$?$#笔记
  5. ASP.NET Core学习——5
  6. Linux-存储服务之NFS
  7. C#笔记之又谈装箱与拆箱(boxing and unboxing)
  8. ADO.Net中DataSete的应用
  9. Golang--defer的mi魂汤
  10. linux内实践核分析模块