По причинам воспроизводимости, я делюсь данными здесь .
Из столбца 2 я хотел прочитать текущую строку и сравнить ее со значением предыдущей строки.Если оно больше, я продолжаю сравнивать.Если текущее значение меньше значения предыдущего ряда, я хочу разделить текущее значение (меньше) на предыдущее значение (больше).Соответственно, следующий код:
import numpy as np
import matplotlib.pyplot as plt
protocols = {}
types = {"data_c": "data_c.csv", "data_r": "data_r.csv", "data_v": "data_v.csv"}
for protname, fname in types.items():
col_time,col_window = np.loadtxt(fname,delimiter=',').T
trailing_window = col_window[:-1] # "past" values at a given index
leading_window = col_window[1:] # "current values at a given index
decreasing_inds = np.where(leading_window < trailing_window)[0]
quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds]
quotient_times = col_time[decreasing_inds]
protocols[protname] = {
"col_time": col_time,
"col_window": col_window,
"quotient_times": quotient_times,
"quotient": quotient,
}
data_c
- это numpy.array
, который имеет только одно уникальное quotient
значение 0.7
, как и data_r
с уникальнымquotient
значение 0.5
.Однако data_v
имеет два уникальных значения quotient
(0.5
или 0.8
).
Я хотел бы просмотреть значения quotient
этих CSV-файлов и классифицировать их, используя простое выражение if-else
.Я получаю помощь от одного участника StackOverflow, использующего numpy.array_equal следующим образом.
import numpy as np
unique_quotient = np.unique(quotient)
unique_data_c_quotient = np.r_[ 0.7]
unique_data_r_quotient = np.r_[ 0.5]
if np.array_equal( unique_quotient, unique_data_c_quotient ):
print('data_c')
elif np.array_equal( unique_quotient, unique_data_c_quotient ):
print('data_r')
Это прекрасно работает для data_c
и data_r
, значения которых равны 0,7 и 0,5 соответственно.Это означает, что он работает только тогда, когда значение quotient
является уникальным (или фиксированным).Однако это не работает, когда значение quotient
больше одного.Например, data_m
имеет значения от 0,65 до 0,7 (т. Е. 0.65<=quotient<=0.7
), а data_v
имеет два значения quotient
(0,5 и 0,8)
Как мы можем решить эту проблему, используя numpy arrays