Я устроил аналогичный контекст, как вы описали, и я столкнулся с той же ошибкой. Мне удалось заставить его работать, удалив "
с начала и конца содержимого и заменив \/
на /
.
Вот фрагмент кода:
var result = client.Execute(request);
var response = result.Content
.Substring(1, result.Content.Length - 2)
.Replace(@"\/","/");
byte[] d = Convert.FromBase64String(response);
В качестве альтернативы вы можете использовать XML для формата ответа:
[WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Xml)]
public string ExportToExcel() { //... }
На стороне клиента:
request.AddHeader("Accept", "application/xml");
request.AddHeader("Content-Type", "application/xml");
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/xml"; };
var result = client.Execute(request);
var doc = new System.Xml.XmlDocument();
doc.LoadXml(result.Content);
var xml = doc.InnerText;
byte[] d = Convert.FromBase64String(xml);
По сути, вы можете определить локальные минимумы как точку, в которой вы не можете двигаться ни влево, ни вправо, не увеличивая свою ценность. Позвольте мне продемонстрировать это с помощью графика cos()
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1000)
y = np.cos(x * np.pi / 180)
plt.plot(x, y)
Значения хранятся в переменной y
. На каждом индексе (кроме первого и последнего) просто проверьте 2 соседних значения, если оба значения больше, чем вы в данный момент находитесь на локальных минимумах. Вот код:
local_min = []
for i in range(1, len(y)-1):
if y[i-1] >= y[i] and y[i] <= y[i+1]:
local_min.append(i)
print(local_min)
Вывод:
[180, 540, 900]