首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数学列表中找到许多最大值?

如何在数学列表中找到许多最大值?
EN

Stack Overflow用户
提问于 2015-07-01 16:55:47
回答 2查看 233关注 0票数 1

我有一些数据,我试图分析,它有许多循环,它返回到一个最大值。我希望能够选择和提取所有这些最大值,并建立一个趋势线,看看它是否有良好的耐用性。

我的问题很像This Question,但我的分段不一致

数据是以标签分隔格式{时间戳、数据、cycle#、布尔}存储的--我让它能够用这段代码提取每个循环,但是如何同时得到最大值呢?

代码语言:javascript
复制
#Importing the List#
SetDirectory[NotebookDirectory[]] 
rawl = Import["SU8-20-50psi-6-29.txt", "TSV"];
date = {rawl[[4]][[1]]}
pressure = {rawl[[4]][[2]]};
forwardflow = {rawl[[4]][[3]]};
backwashflow = {rawl[[4]][[4]]};
forwardpressure = {rawl[[4]][[5]]};
backwashpressure = {rawl[[4]][[6]]};
cycles = {rawl[[4]][[7]]};
backwash = {rawl[[4]][[8]]};

length = Length[rawl]

iter = 4;

While[iter < length,
 iter = iter + 1;
 AppendTo[date, rawl[[iter]][[1]]];
 AppendTo[pressure, rawl[[iter]][[2]]];
 AppendTo[forwardflow, rawl[[iter]][[3]]];
 AppendTo[backwashflow, rawl[[iter]][[4]]];
 AppendTo[forwardpressure, rawl[[iter]][[5]]];
 AppendTo[backwashpressure, rawl[[iter]][[6]]];
 AppendTo[cycles, rawl[[iter]][[7]]];
 AppendTo[backwash, rawl[[iter]][[8]]]]

Select[rawl, #[[]][[7]] == 1 &]

我在找第三个数据点的最大值

下面是数据文件的示例

代码语言:javascript
复制
2015-06-30 16:11:15.628563  0.5 0.7 0.0 11.1    41.2    0   False
2015-06-30 16:11:15.889830  0.9 0.3 0.0 7.7 42.6    0   False
2015-06-30 16:11:16.090567  1.5 0.6 0.0 5.3 43.2    0   True
2015-06-30 16:11:16.338970  1.4 1.0 0.0 7.2 43.2    0   True
2015-06-30 16:11:16.456993  1.4 1.4 0.0 9.6 43.2    0   True
2015-06-30 16:11:16.580034  1.4 1.0 0.0 11.6    43.7    0   True
2015-06-30 16:11:16.692873  1.5 1.0 0.0 13.7    43.7    0   True
2015-06-30 16:11:16.804827  1.5 0.6 0.0 15.0    43.6    1   False
2015-06-30 16:11:16.937007  1.6 0.4 0.0 15.7    43.7    1   True
2015-06-30 16:11:17.047861  1.6 0.0 0.0 15.8    43.6    1   True
2015-06-30 16:11:17.158619  1.6 0.0 0.0 15.8    43.7    1   True
2015-06-30 16:11:17.293030  1.5 0.0 0.0 15.7    43.9    1   True
2015-06-30 16:11:17.404268  1.5 0.0 0.0 15.7    44.0    1   True
2015-06-30 16:11:17.514991  1.5 0.0 0.0 15.6    44.8    1   True
2015-06-30 16:11:17.650058  1.5 0.0 0.0 15.7    44.7    1   True
2015-06-30 16:11:17.761827  1.5 0.0 0.0 15.7    44.7    1   True
2015-06-30 16:11:17.872931  1.8 0.0 0.0 15.7    44.1    2   False
2015-06-30 16:11:18.112676  0.4 0.0 0.0 15.0    42.4    2   False

<<<编辑>>>>这里是我的更新代码,我一直在尝试,但不能完全让它工作

groups = Split[rawl, #1[[7]] == #2[[7]] &]; (* this works great*) group = Max[groups[[3]][[All, 3]]] (*This works too*) Map[Max, groups[[#]][[All, 3]]] & (*So why wont these work?*) Transpose[MapAt[Max /@ # &, Transpose[groups], 3]]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-02 02:41:07

谢谢你提供的样本数据,这总是有帮助的。

我不确定我能理解你所有的问题,但也许这会让你解释我错过了什么。

代码语言:javascript
复制
rawl = Import["psi.txt", "TSV"];
rawl = Drop[rawl, 3];(*drop unwanted header rows?*)
{date, pressure, forwardflow, backwashflow, forwardpressure, 
  backwashpressure, cycles, backwash} = Transpose[rawl]

提取列并将数据存储在变量中。

代码语言:javascript
复制
Select[rawl, #[[7]] == 1&]

用cycles==1提取那些行。

这将提取最大正向流。

代码语言:javascript
复制
maxff = Max @@ forwardflow

还有这个

代码语言:javascript
复制
Select[rawl, #[[3]] == maxff&]

查找前向流等于该最大值的所有行。

如果您能够澄清您需要做的最后一步,那么我将尝试完成这一步。

<<<编辑>>>

你对这个过程的最新描述更有帮助。

所以我的想法是:

1:您希望在第7列中对具有相同编号的项进行分组。在“帮助”页中查找“拆分”。查看示例,了解如何在有多列行时对某一特定列进行分组。这将使每个组在一个额外的{}层内,而所有组将位于{}的外层。

2:现在您想要“对每个项执行相同的操作”,其中每个项都是步骤1中的行组。在Mathematica中,这通常最好使用Map函数来完成。在帮助页上查一下。您想要做的是Max函数,您需要了解如何使用订阅获得第三列。这应该会给你maxima的列表。地图会把所有的结果放到一个列表中,这样你就可以免费得到第三步了。

他说:然后你可以画出最终的列表。

所以看看这是否给了你足够的想法让你开始。如果你找不出这门语言的某些部分,那就让我知道,我再给你一个提示。

票数 0
EN

Stack Overflow用户

发布于 2015-07-20 17:28:37

多亏了比尔,这就是我想出来的,它就像一种魅力,比任何有than循环的东西都要快得多。

代码语言:javascript
复制
(*import the data*)
rawl = Import["SU8-MA7.txt", "TSV"];
rawl = Drop[rawl, 3];(*drop unwanted header rows*)
{date, pressure, forwardflow, backwashflow, forwardpressure, backwashpressure, cycles, backwash} = Transpose[rawl];

(*Split it into groups and get the maximum of each group*)
totalcycles = Max[cycles]
groups = Split[rawl, #1[[7]] == #2[[7]] &];
f[group_] := Max[groups[[group]][[All, 3]]]
maximum = Map[f, Range[1, totalcycles]];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31167379

复制
相关文章

相似问题

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