3
A
回答
7
“我能找到的这个矩阵的最小值是不是在一个精确的范围内?
如果你只关心对满足一定条件的最低值,而不是位置,然后
>>> numpy.random.seed(1)
>>> m = numpy.random.randn(5.,5.)
>>> m
array([[ 1.62434536, -0.61175641, -0.52817175, -1.07296862, 0.86540763],
[-2.3015387 , 1.74481176, -0.7612069 , 0.3190391 , -0.24937038],
[ 1.46210794, -2.06014071, -0.3224172 , -0.38405435, 1.13376944],
[-1.09989127, -0.17242821, -0.87785842, 0.04221375, 0.58281521],
[-1.10061918, 1.14472371, 0.90159072, 0.50249434, 0.90085595]])
>>> m[~ ((m < 0.5) | (m > 0.8))].min()
0.50249433890186823
如果你想通过argmin的位置,那么这是一个有点棘手,但一个方法是使用屏蔽阵列:
>>> numpy.ma.array(m,mask=((m<0.5) | (m > 0.8))).argmin()
23
>>> m.flat[23]
0.50249433890186823
请注意,此处的条件会翻转,因为对于排除的值,掩码为True,而不是包含的值。
更新:看来,通过“指定范围内”你不是说最小值是不是有些范围内,但要基于的排除从搜索的矩阵的部分x,y坐标。这里有一种方法(与之前的矩阵相同):
>>> xx, yy = numpy.indices(m.shape)
>>> points = ((xx == 0) & (yy == 0)) | ((xx > 2) & (yy < 3))
>>> points
array([[ True, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[ True, True, True, False, False],
[ True, True, True, False, False]], dtype=bool)
>>> m[points]
array([ 1.62434536, -1.09989127, -0.17242821, -0.87785842, -1.10061918,
1.14472371, 0.90159072])
>>> m[points].min()
-1.1006191772129212
如果您需要位置,请使用相应的蒙版阵列变体。 [编辑使用索引而不是mgrid;我真的忘了它,直到它今天在另一个答案使用!]
如果我仍然是错的:^),这也不是你所追求的,请编辑你的问题,包括一个3x3您想要的输入和输出的例子。
4
我猜这就是你想达到什么目的:
Argmin使用数组:
>>> from numpy import *
>>> a = array([2,3,4])
>>> argmin(a)
0
>>> print a[argmin(a)]
2
Argmin与矩阵:
>>> b=array([[6,5,4],[3,2,1]])
>>> argmin(b)
5
>>> print b[argmin(b)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: index out of bounds
同样的方法进行索引没有为数组工作。原因是argmin(以及argmax)返回变量的索引 - 在矩阵的情况下,您需要将您的n维矩阵转换为一维索引数组。
为了做到这一点,你需要调用ravel
:
>>> print b
[[6 5 4]
[3 2 1]]
>>> ravel(b)
array([6, 5, 4, 3, 2, 1])
当你与argmin结合拉威尔,你必须写:
>>> print ravel(b)[argmin(b)]
相关问题
- 1. 优雅的解决方案?
- 2. SQL查询 - 需要优雅的解决方案
- 3. 更好的解决方案重复代码,需要优雅
- 4. 只读值的优雅解决方案
- 5. 寻求优雅的LINQ解决方案
- 6. 没有javascript的优雅解决方案
- 7. JavaScript树 - 优雅的解决方案?
- 8. Cakephp,数量优雅的解决方案?
- 9. 需要一个简单的,C++宾果板的优雅解决方案
- 10. 需要较短/更优雅的解决方案,以蟒蛇while循环
- 11. 需要HTTPRequest解决方案
- 12. Python解决方案需要
- 13. 在Numpy中将矢量追加到矩阵的优雅解决方案?
- 14. 在命名空间中解析XElements的优雅解决方案
- 15. 需要Thread.sleep()的替代解决方案;
- 16. 需要ngfor的解决方案
- 17. 需要解决方案我的程序
- 18. Matlab需要的解决方案
- 19. 最优雅的是java的数字()解决方案
- 20. 优雅的解决方案,以嵌套的else-if链
- 21. 推特推动器传送带优化解决方案需要
- 22. C#字符串分裂优雅的解决方案
- 23. 寻找一个更优雅的解决方案
- 24. 代理混乱的优雅解决方案
- 25. 优雅和全面的评论解决方案
- 26. 多选择输入的优雅解决方案?
- 27. 这段代码是否有更优雅的解决方案?
- 28. 显示bash别名值的优雅解决方案
- 29. 什么是std :: find这个错误的优雅解决方案?
- 30. Location.reload更加优雅/高效的解决方案
嗯,这不完全是我想要的,但它似乎很有趣,我想找到一个数组的最小值,使得这个最小值应该位于索引x到y之间。这个范围可能连接或断开,所以说[x-x1和y-y1]或连接[x-y]。 – JustInTime 2011-06-06 11:20:51