首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >矩阵行中点取决于一定条件的Matlab

矩阵行中点取决于一定条件的Matlab
EN

Stack Overflow用户
提问于 2013-08-02 07:48:53
回答 3查看 787关注 0票数 1

我有一个大小为10x100的矩阵A,如下所示。我想做的是:

  1. 我将逐行工作,对于每一行,我将检查该行中每一个颜色的数据。
  2. 假设我现在在第一行的第一个单元格中。我将检查这个值是否为零,我将移到下一个col,以此类推,直到我找到一个具有非零值的col,并保存它的col数,例如col3“这意味着col &2是零”。
  3. 现在我在row1中的第一个非零值,我将移动到下一个,直到我找到一个零值的col。我会在这个零一之前把它拿来,它一定是一个非零的,并保存它。这意味着col 4和5&6是非零的,col8是零的。
  4. 现在,我想保存这两列(例如col3和col7 )之间的中间值,然后中间值是col5,所以我将保存索引row1_col5。如果有两个中间值,那么其中任何一个都可以。
  5. 然后,我将移到下一个行,直到找到一个非零的“从2->5执行相同的步骤”,直到第一行完成为止。
  6. 移到下一行,从步骤2->5重新开始。
  7. 有两条规则:-The第一条是,只有在至少有3个非零连续值的情况下,我才能得到非零连续值的中间索引,如果有两个非零的连续值,那么中间的值将不会被计算,第二个是,如果零连续值的数目小于3,那么它们将被忽略,并被视为非零值。例如,在下面的示例中,第一行中间值是col5和col11。在row2中,col5被计算在内,而row3中的cols不满足这个条件,而在row4中col6或col7将被计算在内。
  8. 在完成所有行之后,希望有一个向量或数组保存所有中间索引的位置,例如row1_col5、row1_col17、row2_col_10等。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A = [ 0 0 0 2 4 1 0 0 0 1 3 2;
      0 0 0 5 1 1 1 1 0 0 0 1;
      0 3 4 1 0 3 1 2 0 0 1 3;
      0 0 0 0 1 3 4 5 0 0 0 0];

对于第一行,中间值是5和11,等等,所以如果有人可以建议我如何用最少的处理来完成这个任务,因为可以使用循环来完成,但是如果有更有效的方法来完成呢?如果需要澄清,请告诉我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-02 08:47:06

现在你澄清了你的问题(再次.)这里有一个解决方案(仍然使用for循环.)。它包括“规则7”--不包括少于三个元素的运算;它还包括该规则的第二部分--少于三个零的运算不算作零。新代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A = [ 0 0 0 2 4 1 0 0 0 1 3 2;
      0 0 0 5 1 1 1 1 0 0 0 1;
      0 3 4 1 0 3 1 2 0 0 1 3;
      0 0 0 0 1 3 4 5 0 0 0 0];

 retVal = cell(1, size(A, 1));
 for ri = 1:size(A,1)
     temp = [1 0 0 0 A(ri,:) 0 0 0 1]; % pad ends with 3 zeros + 1
                                       % so that is always a "good run"
     isz = (temp == 0); % find zeros - pad "short runs of 0" with ones
     diffIsZ = diff(isz);
     f = find(diffIsZ == 1);     
     l = find(diffIsZ == -1);
     shortRun = find((l-f)<3); % these are the zeros that need eliminating

     for ii = 1:numel(shortRun)
         temp(f(shortRun(ii))+1:l(shortRun(ii))) = 1;
     end

     % now take the modified row:
     nz = (temp(4:end-3)~=0);
     dnz = diff(nz); % find first and last nonzero elements
     f = find(dnz==1); 
     l = find(dnz==-1);
     middleValue = floor((f + l)/2);
     rule7 = find((l - f) > 2);
     retVal{ri} = middleValue(rule7);
 end

返回值必须使用单元格数组,因为您不知道每行将返回多少个元素(根据更新的需求)。

上面的代码返回以下单元格数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{[5 11], [6], [7], [7]}

我似乎仍然不理解您的“规则7",因为您说”第3行中没有列满足此条件“。但在我看来,一旦我们消除了短距离的零,它就做到了。除非我误解了您想要处理的非零数的运行,并一直到边缘(我假设这是好的-这就是为什么您返回11作为一个有效的列在第1行;那么,您为什么不返回7的第3行?)

票数 3
EN

Stack Overflow用户

发布于 2013-08-02 09:08:05

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sizeA = size(A);
N = sizeA(1);
D = diff([zeros(1, N); (A.' ~= 0); zeros(1,N)]) ~= 0;
[a b] = find(D ~= 0);

c = reshape(a, 2, []);
midRow = floor(sum(c)/2);
midCol = b(1:2:length(b))

在此之后,midRow和midCol包含您的质心的指数(例如,对于上面给出的示例矩阵,midRow(1) = 1,midCol(1) =4)。

票数 1
EN

Stack Overflow用户

发布于 2013-08-02 08:24:55

如果您不介意使用for循环:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A = [ 0 0 1 1 1 0 1;
      0 0 0 0 0 0 0;
      0 1 1 1 1 0 0;
      0 1 1 1 0 1 1;
      0 0 0 0 1 0 0]; % data

sol = repmat(NaN,size(A,1),1);
for row = 1:size(A,1)
  [aux_row aux_col aux_val] = find(A(row,:));
  if ~isempty(aux_col)
    sol(row) = aux_col(1) + floor((find(diff([aux_col 0])~=1,1)-1)/2);
    % the final 0 is necessary in case the row of A ends with ones
    % you can use either "floor" or "ceil"
  end
end

disp(sol)

试试,看看它能不能做你想做的事。我希望代码是清楚的,如果没有,请告诉我

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18021158

复制
相关文章
ScintillaNET 需要帮助
Scintilla是一个免费的源代码编辑控件,它完全开放源代码,并且提供一个license允许用户自由地将它用在开源软件或是商业软件中。作为源代码编辑控件,我们能在普通的的文本编辑控件中能看到的功能,Scintilla都完全能够实现,而且,它还能够提供很多编辑和调试源代码时有用的特殊功能。包括语法高亮显示,错误指示,代码自动完成以及代码提示等。而且在左边的空白处(margin),可以显示调试代码中非常有用的显示断点以及显示当前运行行等功能。而且,自定义风格的功能比其他大部分编辑器控件都开放,它允许用户自定
张善友
2018/01/22
1.5K0
测试人员需要了解的工具有哪些
大多数初学者. 或者某个领域知识的入行者. 习惯性地去搜集各种看似无用的资料. 视频. 工具。其实. 如果都去研读. 理解. 并应用之. 还是有点用的。否则. 只会占用磁盘空间. 还浪费时间。然而. 工具嘛。虽然不用全部搞懂。但. 还是要懂一点的。
软件测试君
2021/11/09
1.3K0
您的组织真的需要 Kubernetes 吗?
petecheslock在 Twitter 上表达了对无处不在的 Kubernetes 的批评观点:
用户5166556
2023/09/07
2290
您的组织真的需要 Kubernetes 吗?
我真的需要第三方安全审计吗?
写在前面的话 随着安全威胁以及数据泄露事件数量的不断增加,很多客户都希望通过增加额外的安全保护措施来让自己的机密信息得到更好的安全保障。现在很多企业在面对“信息安全”这个问题时,都会努力让自己符合行业
FB客服
2018/03/22
2.2K0
我真的需要第三方安全审计吗?
PHP简单实现多维数组合并与排序功能示例
本文实例讲述了PHP简单实现多维数组合并与排序功能。分享给大家供大家参考,具体如下:
用户2323866
2021/07/06
7300
我写的代码真的规范吗
相信很多人都有这样的经历,做项目经常都是需求赶着自己,加班加点的完成功能开发,盼望着浏览器控制台不要出现红色的报错,惊险的通过QA测试,最后期盼着能够按时完成成功上线。 很明显,自己在日常需求开发中,更多的是关注功能能否实现,效果能否实现,按时上线能否实现。这样的技术人生是不是太没追求了呢?作为一名开发,是不是还要考虑自己的代码是否足够规范,是否足够强壮,是否有性能隐患呢? 控制台没报错,功能正常并不代表自己写的代码是符合规范,更不能代表代码是没有隐患的,我们需要一个更严谨的工具来校验自己写的代码。而这个工具就是今天在这里介绍的Eslint。 Eslint是什么
用户1065635
2019/03/21
1.2K0
【说站】js创建具有可变数量的数组
1、Array.of()方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。
很酷的站长
2022/11/24
3.1K0
【说站】js创建具有可变数量的数组
搭建直播教育平台,需要它的“帮助”才行
在搭建直播教育平台这方面,可能绝大多数人都会存在疑惑:是不是找一开发公司购买一套优质的教育直播平台源码就可以了?其实源码对于开发来说,确确实实是非常重要的,而且也是最基础的一部分。但是在此基础之上,还需要更多技术方面的知识和能力,比如我们经常见到的DNS负载均衡。今天就主要分享一下DNS负载均衡方面的知识内容。
万岳教育源码
2020/05/16
1.1K0
搭建直播教育平台,需要它的“帮助”才行
[案例] 快速对接德尔福/Delphi EDI
本次知行软件为汽车电缆行业某客户提供EDI的技术服务,是同时和三位国外贸易合作伙伴进行EDI对接,在双方的共同努力下,最终成功对接了Nexans, KSD, Delphi三位贸易合作伙伴。
EDI顾问-杨欢
2020/04/10
5960
你的企业真的需要“数据中台”吗?
数据中台包括平台、工具、数据、组织、流程、规范等一切与企业数据资产如何用起来所相关的。
数澜科技
2019/09/29
1.8K0
你的企业真的需要“数据中台”吗?
你的公司是否真的需要大数据战略?
我们认为,企业应该重视数据统治和数据管理。如果数据是一个企业最重要的资产,然后常规的数据统治项目和数据管理最佳实践是其能够实现的多数投资策略。如果只有其中一种投资,企业都会在获取已有数据资源中面临挑战,仍然有可能会被大数据的迸发淹没掉企业。数据统治和数据管理共同掌控着一个企业如何实现理解和使用自己的数据资产,以及那些资产随着时间是如何被管理的。两者变得更加具备战略性,因为企业从数据中获得发展,记录的中心数据库系统基于动态的历史结果做报告,参与的实时系统能更快生成洞察力和告知新手更好的决策,更准确的数据。
IT阅读排行榜
2018/08/14
3530
web server 你真的需要
最近有几个项目都是涉及到嵌入式web服务器的,我们经常要用到像js脚本,cgi 技术和css格式样表,以及html语言来描述网页,那么怎么调试呢?对于做惯了嵌入式下位机的猿友来讲,大家可能对网页部分的开发不是很擅长,但是随着现在对嵌入式程序猿要求的越来越高,以及万物互联,IOT,TOE等人们概念的普及和需求,你不得不提高技术储备,而不要说是自己做底层就不去关心上面的东西,好的程序猿好的攻城狮应该是能写上位,也能写下位。 在浏览器中打开网页,可以点击右键如下图中的inspect进入网页HTML的调试和检查。
用户1605515
2018/04/11
8030
web server 你真的需要
我们真的需要JWT吗?
JWT(JSON Web Token)是目前最流行的认证方案之一。博客园、各种技术公众号隔三差五就会推一篇JWT相关的文章,真的多如牛毛。但我对JWT有点困惑,今天写出来跟大家探讨探讨,不要喷哈。
MJ.Zhou
2020/09/01
1.6K0
我们真的需要JWT吗?
我想说:mysql 的 join 真的很弱
对这个结论,你是否有怀疑呢?也不知道是哪位先哲说的不要人云亦云,今天我设计sql,来验证这个结论。(实验没有从代码角度分析,目前达不到。可以把mysql当一个黑盒,使用角度来验证这个结论) 验证结论的时候,会有很多发现,各位往后看。
JAVA葵花宝典
2019/11/18
4260
我想说:mysql 的 join 真的很弱
为什么你的网站需要搭建在线帮助中心?
帮助中心,就是在产品网站或者产品内部将产品使用上遇到的问题,或者关于产品的所有问题进行汇总,通过Q&A的形式展现给用户,帮助用户快速解决在使用上遇到的问题。帮助中心为用户提供一个渠道,快速找到解决方案,减少人工工作量。
小炮
2022/06/01
7130
activity和task的启动模式有哪些_大数据是需要新处理模式才能具有
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
全栈程序员站长
2022/11/08
3970
我想说:mysql 的 join 真的很弱
对这个结论,你是否有怀疑呢?也不知道是哪位先哲说的不要人云亦云,今天我设计sql,来验证这个结论。(实验没有从代码角度分析,目前达不到。可以把mysql当一个黑盒,使用角度来验证这个结论) 验证结论的时候,会有很多发现,各位往后看。
物流IT圈
2019/11/20
4450
我想说:mysql 的 join 真的很弱
js数组的拷贝赋值复制-你真的懂?
在看react-native性能优化的时候,看到如何避免shouldComponentUpdate的异常数据时,脑内一阵风暴,从而牵连出一连串的问题,于是有了这一篇关于js数组的复制(深浅拷贝)与赋值等为何能产生异常数据的文章。 有什么问题欢迎指正 现在进入正题: 首先异常数据的产生在于我们在复制赋值时,会有或没有改变到本身的值。 一、push与concat push的定义是:像数组末尾添加一个或更多元素,并返回新的长度。该方法会改变数组的长度。 concat的定义是:连接两个或更多的数组,并返回结果,该方
IT架构圈
2018/05/31
4.8K0
关于帮助中心,你需要知道的一切
帮助中心,就是在产品网站或者产品内部将产品使用上遇到的问题,或者关于产品的所有问题进行汇总,通过Q&A的形式展现给用户,帮助用户快速解决在使用上遇到的问题。帮助中心为用户提供一个渠道,快速找到解决方案,减少人工工作量。
小炮
2022/03/16
6320
点击加载更多

相似问题

Android屏幕大小HDPI、LDPI、MDPI

40

如何根据手机屏幕尺寸增加位图图像大小?

14

图像大小(drawable-hdpi/ldpi/mdpi/xhdpi)

91

android为所有屏幕(ldpi、mdpi、hdpi、xhdpi)调整图像大小并放入文件夹

40

如何根据屏幕大小调整图像大小

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文