标签: argmax

获取轴上numpy.argmax元素的索引

我有N维矩阵,其中包含具有N个参数的函数的值.每个参数都有一个离散数量的值.我需要最大化除了一个参数之外的所有参数的函数,从而产生大小等于非最大化参数的值的一维向量.我还需要保存其他参数所采用的值.

为此,我想迭代地应用numpy.max不同的轴来减少矩阵的维数以找到我需要的东西.最终的矢量将取决于我遗漏的参数.

然而,我无法找到最终元素的原始索引(其中包含有关其他参数所采用值的信息).我虽然numpy.argmax以同样的方式使用,numpy.max但我无法获得原始索引.

我正在尝试的一个例子是:

x = [[[1,2],[0,1]],[[3,4],[6,7]]]
args = np.argmax(x, 0)
Run Code Online (Sandbox Code Playgroud)

这回来了

[[1 1]
 [1 1]]
Run Code Online (Sandbox Code Playgroud)

这意味着argmax正在选择原始矩阵中的元素(2,1,4,7).但如何获得他们的指数?我尝试unravel_index使用args直接作为矩阵的索引x,从numpy到索引的一堆函数没有成功.

使用numpy.where不是解决方案,因为输入矩阵内部可能具有相等的值,因此我无法从不同的原始值中辨别出来.

python arrays indexing numpy argmax

7
推荐指数
1
解决办法
3548
查看次数

pandas idxmax:如果有关系则返回所有行

我正在使用一个数据框,其中我按概率对每一行进行加权。现在,我想选择概率最高的行,我使用 pandas idxmax() 来这样做,但是当有平局时,它只返回平局中的第一行。就我而言,我想获取所有 tie 的行

此外,作为研究项目的一部分,我正在这样做,我正在处理数百万个如下所示的数据帧,因此保持快速是一个问题。

例子:

我的数据如下所示:

data = [['chr1',100,200,0.2],
    ['ch1',300,500,0.3],
    ['chr1', 300, 500, 0.3],
    ['chr1', 600, 800, 0.3]]
Run Code Online (Sandbox Code Playgroud)

从这个列表中,我创建了一个 Pandas 数据框,如下所示:

weighted = pd.DataFrame.from_records(data,columns=['chrom','start','end','probability'])
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

  chrom  start  end  probability
0  chr1    100  200          0.2
1   ch1    300  500          0.3
2  chr1    300  500          0.3
3  chr1    600  800          0.3
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法选择适合 argmax(probability) 的行:

selected =  weighted.ix[weighted['probability'].idxmax()]
Run Code Online (Sandbox Code Playgroud)

哪个当然返回:

chrom          ch1
start          300
end            500
probability    0.3
Name: 1, dtype: object
Run Code Online (Sandbox Code Playgroud)

当有关系时,是否有(快速)方法来获取所有值?

谢谢!

python performance pandas argmax

7
推荐指数
2
解决办法
4560
查看次数

Scala/Spark数据帧:找到与max相对应的列名

在Scala/Spark中,有一个数据帧:

val dfIn = sqlContext.createDataFrame(Seq(
  ("r0", 0, 2, 3),
  ("r1", 1, 0, 0),
  ("r2", 0, 2, 2))).toDF("id", "c0", "c1", "c2")
Run Code Online (Sandbox Code Playgroud)

我想计算一个新列maxCol拿着名称对应于(各行)的最大值之列.在这个例子中,输出应该是:

+---+---+---+---+------+
| id| c0| c1| c2|maxCol|
+---+---+---+---+------+
| r0|  0|  2|  3|    c2|
| r1|  1|  0|  0|    c0|
| r2|  0|  2|  2|    c1|
+---+---+---+---+------+
Run Code Online (Sandbox Code Playgroud)

实际上,数据框有超过60列.因此,需要通用的解决方案.

Python Pandas中的等价物(是的,我知道,我应该与pyspark进行比较......)可能是:

dfOut = pd.concat([dfIn, dfIn.idxmax(axis=1).rename('maxCol')], axis=1) 
Run Code Online (Sandbox Code Playgroud)

scala dataframe argmax apache-spark apache-spark-sql

6
推荐指数
1
解决办法
1440
查看次数

F#库是否具有`argMax`的标准函数?

我是F#的新手,并编写了一些简单的算法来习惯这种语言,这需要argMax.标准库是否具有搜索最大化函数的列表元素的功能?也就是说,如果现有函数的行为与此类似:

let argMax f xs =
  let rec go a fa zs =
    match zs with
      | [] -> a
      | z :: zs' ->
        let fz = f z
        if fz > fa
        then go z fz zs'
        else go a fa zs'
  match xs with
    | []       -> invalidArg "xs" "empty"
    | x :: xs' -> go x (f x) xs'
Run Code Online (Sandbox Code Playgroud)

f# argmax

5
推荐指数
1
解决办法
161
查看次数

numpy 数组的累积 argmax

考虑数组 a

np.random.seed([3,1415])
a = np.random.randint(0, 10, (10, 2))
a

array([[0, 2],
       [7, 3],
       [8, 7],
       [0, 6],
       [8, 6],
       [0, 2],
       [0, 4],
       [9, 7],
       [3, 2],
       [4, 3]])
Run Code Online (Sandbox Code Playgroud)

获得累积 argmax 的矢量化方法是什么?

array([[0, 0],  <-- both start off as max position
       [1, 1],  <-- 7 > 0 so 1st col = 1, 3 > 2 2nd col = 1
       [2, 2],  <-- 8 > 7 1st col = 2, 7 > 3 2nd col = 2
       [2, 2],  <-- …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy vectorization argmax

5
推荐指数
1
解决办法
667
查看次数

减少最大值的 Numpy 索引 - numpy.argmax.reduceat

我有一个平面数组b

a = numpy.array([0, 1, 1, 2, 3, 1, 2])
Run Code Online (Sandbox Code Playgroud)

以及c标记每个“块”开始的索引数组:

b = numpy.array([0, 4])
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用归约找到每个“块”中的最大值:

m = numpy.maximum.reduceat(a,b)
>>> array([2, 3], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

但是...有没有一种方法可以通过向量化操作(无列表、循环)找到<edit>块内最大值的索引</edit>(例如)?numpy.argmax

numpy vectorization reduction argmax numpy-ufunc

5
推荐指数
1
解决办法
1224
查看次数

生成 e2big 节点

我有一个在 debian 上运行的节点服务器,我尝试使用 将从文件中提取的数据传递到命令行中exec()

getconf ARG_MAX = 2097152 bytes (2 mb)

myFile = 600 kb (contains 600kb worth of parameters)
Run Code Online (Sandbox Code Playgroud)

当我从节点调用 exec() 命令时:

错误:
在ChildProcess.spawn(internal/child_process.js:372:11)
在spawn(child_process.js:543:9)
在Object.execFile(child_process.js:221:15)
在exec(child_process.js: 152:18)
在 Promise (child_process.js:160:15)
在 new Promise () 在 args (child_process.js:159:12)

它不应该工作吗,因为getconf ARG_MAX它比我试图传递的数据大?

debian exec parameter-passing node.js argmax

5
推荐指数
0
解决办法
2212
查看次数

pytorch Argmax 中发生冲突时的索引选择

我一直在尝试学习张量运算,而这个让我陷入了困境。
假设我有一个张量 t:

    t = torch.tensor([
        [1,0,0,2],
        [0,3,3,0],
        [4,0,0,5]
    ], dtype  = torch.float32)
Run Code Online (Sandbox Code Playgroud)

现在这是一个 2 阶张量,我们可以对每个阶/维度应用 argmax。假设我们将其应用于 dim = 1

t.max(dim = 1)
(tensor([2., 3., 5.]), tensor([3, 2, 3]))
Run Code Online (Sandbox Code Playgroud)

现在我们可以看到结果正如预期的那样,沿 dim =1 的张量有 2,3 和 5 作为最大元素。但是3上有冲突。有两个值完全相似。
怎么解决的?是任意选择的吗?有没有像LR一样的选择顺序,指数值越高?
如果您能了解如何解决此问题,我将不胜感激!

python argmax pytorch tensor

5
推荐指数
1
解决办法
1737
查看次数

在 Pandas 中查找跨轴的 N 个最大值的索引

我知道有一个方法 .argmax() 返回轴上最大值的索引。

但是,如果我们想要获取某个轴上 10 个最高值的索引该怎么办?

这怎么可能实现呢?

例如:

data = pd.DataFrame(np.random.random_sample((50, 40)))
Run Code Online (Sandbox Code Playgroud)

python pandas argmax

5
推荐指数
1
解决办法
972
查看次数

每行最后一次出现 True 的索引

我有一个二维数组:

a = ([[False False False False False  True  True  True  True  True  True  True
   True  True  True  True  True  True  True  True  True  True  True  True
   True False False False]
 [False False False False  True  True  True  True  True  True  True  True
   True  True  True  True  True  True  True  True  True  True  True  True
  False False False False]])
Run Code Online (Sandbox Code Playgroud)

我试图获取每行中最后一次出现“True”的索引。所以结果数组应该是

b = ([24, 23])
Run Code Online (Sandbox Code Playgroud)

为了找到第一个 True 的出现,我知道我可以使用 np.argmax()。

b = np.argmax(a==True,axis=1)
Run Code Online (Sandbox Code Playgroud)

有没有从最后查找的函数?我尝试反转数组的值,然后使用 np.argmax(),但它会给出反转数组的索引。

python boolean numpy argmax

5
推荐指数
1
解决办法
1609
查看次数