我已从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)次。
谢谢你们!
答案 0 :(得分:0)
要阅读您展示的数据,需要使用delimiter = ' '
代替,
。但这可能是一个复制问题。
现在有两个数组要在另一个(x
)最大的位置找到一个数组(y
),你可以这样做
x[np.argmax(y)]
wherre np.argmax
找到最大值的索引。
直接使用x
,y
当然会在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。