2017-01-28 4 views
0

Я Полученные данные UV/VisКак найти соответствующее максимальное значение в массиве Numpy

UV/VIS

Моя цель, чтобы найти длину волны после 330nm и найти максимальную оптическую плотность. Так что в этом случае максимальное значение будет составлять около 0,4 при 420 нм

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))) 

Но этот печатает весь массив у, (900-330) раз.

Спасибо, ребята!

+1

в вашем последнем фрагменте кода вы выполняете цикл с переменной 'x', но печатаете' y'. это может быть не то, что вы хотите ... –

ответ

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)] 

Просто, чтобы убедиться, что нет никакой другой ошибки в фоновом режиме: В то время как файл вы читаете in называется Rhodamine, график, который вы показываете, не может быть Rhodamine, потому что он имеет поглощение в желтом/зеленом (~ 550 нм), а не на 420 нм.

+0

Вы абсолютно правы! Я использовал абсорбцию образца вместо Rhodamine B. Хорошая добыча! В любом случае, спасибо вам большое. – user7380140

Смежные вопросы