Matlab将逻辑索引转换为范围

时间:2019-04-05 13:39:39

标签: matlab

无法对此快速找到答案,这似乎非常简单,但我不明白。我想进行以下转换(对于本示例,使用虚构函数transform):

a=[0 0 0 1 0 0 0 0];
b=(-1:2); %rule to transform for every true value in [a], -1:2 should be true
transform(a,b) %should output [0 0 1 1 1 1 0 0]

a=[0 0 0 1 0 0 0 0 1 1 0 0 0]; %another example
transform(a,b) %should output [0 0 1 1 1 1 0 1 1 1 1 1 0];

是否可以使用逻辑运算符快速完成此转换?

编辑:我尝试过

a(find(a)'+(-1:2))=1 %requires matlab>2016 if I'm not mistaken, otherwise replace + sign with bsxfun(@plus,...)

但是我正在寻找一个可能的功能,该功能无需更改a和不使用find(因为使用find kind会失败使用逻辑矩阵/索引的目的)

2 个答案:

答案 0 :(得分:2)

我找到了一个优雅的oneliner,可以解决您的问题:

from bs4 import BeautifulSoup as bs

html = '''
<html>
 <head></head>
 <body>
  <ul class="sub-menu"> 
   <li class="menu-item menu-item-type-post_type menu-item-object-post menu- 
 item-20588" id="menu-item-20588"><a href="http://www.air- 
 shows.org.uk/2018/06/uk-airshow-calendar-2019/">UK Airshow Calendar 2019</a></li> 
   <li class="menu-item menu-item-type-post_type menu-item-object-post menu- 
 item-22412" id="menu-item-22412"><a href="http://www.air- 
 shows.org.uk/2018/07/european-airshow-calendar-2019/">European Airshow Calendar 2019</a></li> 
   <li class="menu-item menu-item-type-taxonomy menu-item-object-category 
 menu-item-18245" id="menu-item-18245"><a href="http://www.air- 
 shows.org.uk/category/display-team-schedule/">Latest Display Team Dates</a></li> 
  </ul>
 </body>
</html>
 '''

soup = bs(html, 'lxml')

all_items = soup.select('.sub-menu li,.sub-menu a')
events = [item.text for item in all_items[0::2]]
links = [item['href'] for item in all_items[1::2]]
print(events, links)

希望有帮助!

答案 1 :(得分:2)

如果您拥有图像处理工具箱,则可以使用imdilate

nh(max(abs([b(1),b(end)]))+1+b) = true;
result = imdilate(a, nh);