【问题标题】:finding the index of the maximum in a matrix in python在python中找到矩阵中最大值的索引
【发布时间】:2017-08-13 00:58:51
【问题描述】:

我有一个矩阵。我想在矩阵的每一行中找到最大值的索引。 问题是这个矩阵是另一种算法的结果,所以我不能使用 numpy 的方式来做。

[[  6.02   6.02   6.02   6.02
    6.02  6.02   6.02  9.94
    6.02  6.02]
 [  4.63  4.63  4.63  4.63
    4.63  4.63   4.63  4.63
    9.95  4.63]
 [  4.54   4.54   4.54  4.54
    4.54   9.95   4.54   4.54
    4.54   4.54]]

所以这个输出将是: [7,8,5]

我想遍历矩阵中的每一行,然后我有一行,但问题是它是这样的:

   a =[  6.02   6.02   6.02   6.02
        6.02  6.02   6.02  9.94
        6.02  6.02]

如您所见,没有相应的格式。我的意思是它们之间没有逗号,所以我不能再像 set 或 list 那样表现了。

当我写a.时没有方法,

更新

这实际上是这个lda_x=lda.fit_transform(corpus)的输出

任何想法都值得赞赏

【问题讨论】:

  • 完全不清楚你在说什么。那是文本文件,还是列表列表,还是什么? (混淆来自于没有包含代码的事实)
  • @sascha 它是一个像我包含的矩阵一样的矩阵,我想要每行中最大值的索引。
  • python中没有矩阵。要精确。您发布的内容可以是字符串、列表列表的字符串表示形式、numpy 矩阵的 str-repr、文本编辑器中的一些复制粘贴...如果是列表列表,只需执行嵌套的 for 循环.很难说你有什么问题。
  • @sascha 非常感谢您的解释。正如我提到的,它是某个过程的输出。我更新了一部分,现在清楚了吗?我们是否可以将其视为本来的样子,并像我想要的那样计算输出而不考虑它的真正含义?
  • 不!编程就是关于类型的!如果您不告诉我们您在程序的哪个部分使用了哪些类型,则没有任何帮助。 (我如何总结 ab?-> a+b。是的,这适用于 a=b=numbers;但是当两者都是字符串时,结果 a+b 是完全不同的。类型很重要! )

标签: python list matrix set


【解决方案1】:

一般性说明:

很明显,您缺少很多编程基础知识,应该阅读更多教程。在不知道的情况下使用 sklearn,它完全基于 numpy 和 scipy-arrays 表明缺乏知识。

我认为你不应该在不理解这些概念的情况下做这样复杂的 ML 工作。

代码(只是为了显示步骤;该代码没有多大意义!):

import numpy as np
from sklearn.decomposition import LatentDirichletAllocation


X = np.random.uniform(size=(10,20))

lda = LatentDirichletAllocation(max_iter=5,
                                learning_method='online',
                                learning_offset=50.,
                                random_state=0)
X_new = lda.fit_transform(X)

print('transformed data')
print(X_new)

print('row-wise maximums')
print(np.amax(X_new, axis=1))

输出:

transformed data
[[ 0.00827835  0.00827806  0.00827819  0.92549556  0.00827816  0.00827812
   0.00827862  0.00827827  0.00827855  0.00827812]
 [ 0.00864627  0.00864591  0.00864594  0.92218549  0.00864589  0.00864588
   0.00864651  0.0086461   0.00864617  0.00864584]
 [ 0.00761386  0.00761349  0.00761361  0.93147708  0.0076135   0.00761359
   0.00761399  0.00761363  0.00761376  0.0076135 ]
 [ 0.00987778  0.0098773   0.00987748  0.91110236  0.00987731  0.00987739
   0.00987797  0.00987747  0.00987762  0.00987731]
 [ 0.00902489  0.00902451  0.00902467  0.9187762   0.00902463  0.00902457
   0.00902629  0.00902484  0.00902484  0.00902455]
 [ 0.0106997   0.01069926  0.01069952  0.90370346  0.01069944  0.0106994
   0.01070011  0.01069987  0.01069985  0.01069938]
 [ 0.00869799  0.00869761  0.00869767  0.92172003  0.00869759  0.0086976
   0.00869823  0.00869782  0.00869789  0.00869756]
 [ 0.00830867  0.0083084   0.00830849  0.92522278  0.00830843  0.00830836
   0.00830908  0.00830855  0.00830887  0.00830837]
 [ 0.00873503  0.00873454  0.00873457  0.92138779  0.00873453  0.00873451
   0.00873501  0.00873467  0.00873481  0.00873453]
 [ 0.01097472  0.01097405  0.01097429  0.90123112  0.01097416  0.01097427
   0.01097458  0.01097437  0.01097436  0.01097409]]
row-wise maximums
[ 0.92549556  0.92218549  0.93147708  0.91110236  0.9187762   0.90370346
  0.92172003  0.92522278  0.92138779  0.90123112]

如果你想要索引而不是值:

print(np.argmax(X_new, axis=1))

哪个输出:

row-wise maximums
[3 3 3 3 3 3 3 3 3 3]

【讨论】:

  • 我相信你是对的,我肯定会改变我的工作方式,并听取你的建议对实现我的目标是一件好事,谢谢我的朋友。为这种不是专业行为的问题道歉
  • 我们都从某个地方开始。但请确保您赞扬 python、numpy、scipy 和 sklearn 的良好文档。都是一流的!
  • 你说得对,我应该在基础上花点时间,然后通过 ML,实际上只是在压力下为星期一准备一些东西,再次感谢。您能否在我搜索索引时将答案更新为 argmax,然后我会赞成将其作为答案?
  • 我认为该答案的当前状态还可以。 argmax 已经提到过,我认为两者都显示是可以的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2019-04-14
  • 2013-07-10
相关资源
最近更新 更多