首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy array - unravel_index的argmax v.sum的argmax

numpy array - unravel_index的argmax v.sum的argmax
EN

Stack Overflow用户
提问于 2012-08-29 21:08:21
回答 2查看 1.7K关注 0票数 1

我正在尝试沿着一个轴对一个阵列进行边缘处理,并检查一维峰值是否出现在与原始二维峰值相同的相关指数处。在什么情况下(x的形式),下面的断言应该失败?

代码语言:javascript
复制
def check(x,axis=None):
    import numpy
    m = numpy.sum(x, axis=axis)
    v,w = numpy.unravel_index(numpy.argmax(x), x.shape)
    assert(v==numpy.argmax(m))
    return

对于x=numpy.array(range(15)).reshape(5,3)check(x,axis=0)会引发错误,但check(x,axis=1)不会。我不明白为什么AssertionError会被抛出--我是不是很愚蠢?

EN

回答 2

Stack Overflow用户

发布于 2012-08-29 21:13:19

您正在检查未分解索引的错误坐标。而不是

代码语言:javascript
复制
v,w=numpy.unravel_index(numpy.argmax(x),x.shape)
assert(v==numpy.argmax(m))

你可能想要

代码语言:javascript
复制
vw = numpy.unravel_index(numpy.argmax(x),x.shape)
assert vw[1 - axis] == numpy.argmax(m)

或者也许

代码语言:javascript
复制
v,w=numpy.unravel_index(numpy.argmax(x),x.shape)
assert (v if axis == 1 else w) == numpy.argmax(m)
票数 1
EN

Stack Overflow用户

发布于 2012-08-29 21:34:53

axis参数的值至关重要。

通过x (N, M)数组,m=np.sum(x, axis=axis)将为您提供

  • a标量if axis=None
  • a M array if axis=0;
  • a N if axis=1.

因此,如果为axis=None,则np.argmax(m)将始终为0,或者为0M之间的整数(分别为N) if axis=0 (分别axis=1)。

但是,您的(v, w) = np.unravel_index(...)将始终将v作为介于0和N之间的整数。

正如您所看到的,对于axis=0m的潜在值范围与v不同,而axis=1是相同的。

因此,如果是axis=1,则将mv进行比较;如果是axis=1,则将其与w进行比较(@ecatmur的答案告诉您如何使用)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12178721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档