如何在numpy数组中找到相应的最大值

时间:2017-01-28 08:42:00

标签: python arrays numpy

我已从UV / Vis

获取数据

UV/VIS

我的目标是在330nm后找到波长并找到最大吸光度。因此,在这种情况下,最高值在420nm处约为0.4

CSV文件看起来像这样

Wavelength (nm) Absorbance (AU) Std.Dev.
190 2.458802223 0.012281572
191 2.523416042 0.011004285
192 2.609054089 0.014727822 
193 2.6453619   0.00920296
.
.

等等

这是我的代码

import os
import sys
import matplotlib.pyplot as plt
import csv
import numpy as np

Rhod = open('Rhodamine.CSV', 'r+')
text = Rhod.read()
Rhod.close()
x = text.split('\n')

f = np.loadtxt(x, delimiter=',', skiprows=1, unpack=True)

x = f[0]
y = f[1]

我使用np.loadtext更改了数组。 但是我被困在这里

我用过

for x in range(330,900):
    print(int(max(y)))

但是这个打印整个y,(900-330)次。

谢谢你们!

1 个答案:

答案 0 :(得分:0)

要阅读您展示的数据,需要使用delimiter = ' '代替,。但这可能是一个复制问题。

现在有两个数组要在另一个(x)最大的位置找到一个数组(y),你可以这样做

x[np.argmax(y)]

wherre np.argmax找到最大值的索引。

直接使用xy当然会在190左右给出不需要的结果。所以你首先需要对数组进行切片。在您的情况下,似乎x值之间的步长相等而且1。这非常简单:

xc = x[330-int(x.min()):]
yc = y[330-int(x.min()):]
print xc[np.argmax(yc)]

对于更一般的情况,您可以使用布尔切片,

xc = x[x >= 330]
yc = y[x >= 330]
print xc[np.argmax(yc)]

只是为了确保后台没有其他错误:当您读入的文件名为Rhodamine时,您显示的图形不能是罗丹明,因为它在黄色中具有吸收/绿色(~550 nm),而不是420 nm。