我有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不是解决方案,因为输入矩阵内部可能具有相等的值,因此我无法从不同的原始值中辨别出来.
我正在使用一个数据框,其中我按概率对每一行进行加权。现在,我想选择概率最高的行,我使用 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)
当有关系时,是否有(快速)方法来获取所有值?
谢谢!
在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) 我是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) 考虑数组 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) 我有一个平面数组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
我有一个在 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它比我试图传递的数据大?
我一直在尝试学习张量运算,而这个让我陷入了困境。
假设我有一个张量 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一样的选择顺序,指数值越高?
如果您能了解如何解决此问题,我将不胜感激!
我知道有一个方法 .argmax() 返回轴上最大值的索引。
但是,如果我们想要获取某个轴上 10 个最高值的索引该怎么办?
这怎么可能实现呢?
例如:
data = pd.DataFrame(np.random.random_sample((50, 40)))
Run Code Online (Sandbox Code Playgroud) 我有一个二维数组:
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(),但它会给出反转数组的索引。