爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3618|回复: 5

[程序设计] 请教提取非零元素,分别存储程序

[复制链接]
发表于 2023-3-1 17:54:58 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有一组类似的数据这样子的数据,a = 【0 0 0 1 2 0 3 0 0 4 5 1 6 9 0 0 0 0 0 33 19 1 44 0】;我需要提取到{1,2},{3},{4 5 1 6 9},{33 19 1 44}这四段非0数据,并分别存储在元胞数组中,思考了良久始终无法实现,请那我大神给个参考意见。感谢
密码修改失败请联系微信:mofangbao
发表于 2023-3-1 22:15:08 | 显示全部楼层
本帖最后由 付亚男 于 2023-3-1 22:16 编辑

这是个很有意思的问题
我想了很久也没想出来一个非常便捷的办法
我把笨办法贴一下,权当抛转砖
用python来实现的话,代码如下


  1. target = [ 0,  0,  0,  1,  2,  0,  3,  0,  0,  4,  5,  1,  6,  9,  0,  0,  0, 0,  0, 33, 19,  1, 44,  0]

  2. arr = []
  3. for i in range(len(target)):
  4.     subarr = []
  5.     for k in range(i+1, len(target)):
  6.         if target[i]==0 and target[k]!=0:
  7.             subarr.append(target[k])
  8.         if target[k]==0:
  9.             break
  10.     if len(subarr)!=0:
  11.         arr.append(subarr)
复制代码






密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-1 22:33:19 | 显示全部楼层
非常感谢,要用到迭代循环,非常感谢提供思路
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2023-3-2 09:57:21 | 显示全部楼层
可以把每一块非0元素看成一个连通区域,用bwlabel函数可以找出并提取
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2023-3-2 10:09:48 | 显示全部楼层
本帖最后由 huangbicheng 于 2023-3-2 23:05 编辑

主要是将开头和结尾定量化
  1. input = [ 0, 0, 0, 1, 2, 0, 3, 0, 0, 4, 5, 1, 6, 9, 0, 0, 0, 0, ...
  2.     0, 33, 19, 1, 44, 0];
  3. data1 = input;
  4. data1(input~=0) = 1;
  5. data2 = diff([0 data1 0]);%开头为1结尾为-1
  6. ind = find(data2==1);
  7. num = find(data2==-1)-ind;
  8. output = arrayfun(@(n) input(ind(n):ind(n)+num(n)-1), ...
  9.     1:length(ind),'UniformOutput', false);
复制代码
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-2 10:53:50 来自手机 | 显示全部楼层
感谢各位提供思路,我一个一个尝试,成功了再回复
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表