首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Matlab中顶点面隶属度矩阵的矢量化

Matlab中顶点面隶属度矩阵的矢量化
EN

Stack Overflow用户
提问于 2015-09-08 22:29:45
回答 1查看 133关注 0票数 1

我正在Matlab上做一些网格的实验。以下是我所拥有的:

  • 包含所有顶点的3X#矩阵
  • 3X # faces 矩阵,包含我的网格中的所有面。

以下是我正在努力高效地创造的东西:

  • 一个#Verts X#面对二进制矩阵Mem。一个条目Mem(i,j) = 1,如果顶点i是三角形j的顶点之一。

下面是我以一种非常低效的方式(我对Matlab矢量化不太了解,所以请原谅我的无知):

代码语言:javascript
运行
AI代码解释
复制
numVerts = size(verts, 2);
numFaces = size(faces, 2);
mem = sparse(numVerts, numFaces);

for i = 1:size(verts, 2)
    mem(i,:) = any(faces == i);
end

下面是一些能够测试这段代码的数值数据:

代码语言:javascript
运行
AI代码解释
复制
verts = [0 0 1 1; 0 1 0 1; 0 0 0 0];
faces = [1 3; 2 2; 3 4];

矩阵的每一列都是顶点的坐标。例如,这里的4个顶点位于位置(0,0,0),(0,1,0),(1,0,0)和(1,1,0)。

矩阵的每一列都是属于一个面的3个顶点的指数。例如,上面定义的网格的面是两个三角形,它们被定义为包含顶点(1,2,3)和(3,2,4)。

这将创建一个简单的网格,包含4个顶点和2个三角形。本例中的mem矩阵是:

代码语言:javascript
运行
AI代码解释
复制
mem = [1 0; 1 1; 1 1; 0 1]

例如,在这里,mem( 2 ,1) =1,这意味着面1包含顶点数2,任何关于我如何更有效地完成它的指针?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 01:35:58

这就是你要的!让我们理解为什么这应该更快(我还没有描述它,但我99.99%肯定它会更快)。

关于稀疏矩阵,您应该知道的一件事是:way首先计算值的位置,然后一次创建矩阵比填充矩阵要快。这是正确的,因为它们存储在内存中的方式。

因此,让我们这样做。在您的问题中,有一件好事:faces实际上包含要填充mem的元素的行索引!列很简单,只是3-1s,3-2s,3-3s,.3-numFaces!我们可以使用repmat轻松地构建这样的数组。因此,这就是代码:

代码语言:javascript
运行
AI代码解释
复制
numVerts = size(verts, 2);
numFaces = size(faces, 2);

jj= repmat(1:numFaces,[3,1]);  % 3 vtx in each face
jj=jj(:)';

mem = sparse( faces(:),jj,1,numVerts,numFaces);

然而,如果您只是使用逻辑,使矩阵成为一个逻辑,并节省大量内存!

代码语言:javascript
运行
AI代码解释
复制
mem = sparse( faces(:),jj,true,numVerts,numFaces);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32472360

复制
相关文章
邻接矩阵求顶点度
#include //蓝多多算法实验六 #include using namespace std; #define MAXVEX 100//最大顶点数 typedef char VertexType;//顶点类型 typedef int EdgeType;//边的权值 typedef struct { VertexType vexs[MAXVEX];//顶点表 EdgeType edges[MAXVEX][MAXVEX];//邻接矩阵 int n, e;//顶点数和边数 }MGraph; MGrap
川川菜鸟
2021/10/18
5640
矩阵组合matlab,matlab中矩阵的所有组合[通俗易懂]
X = perms(1:N); % # Permuations of column indices
全栈程序员站长
2022/08/01
1.4K0
matlab中矩阵的秩,matlab矩阵的秩
如下所示为一方阵 在 matlab 输入矩阵: A = [1 2 4; 407 9 1 3]; 2. 2 查阅 matlab help 可以知道,利用 eig 函数可以快速求解矩阵的特征值与特 征……
全栈程序员站长
2022/09/02
1.2K0
模糊隶属函数确定例题_高斯隶属度函数
偏小、偏大和中间型是最为常用的隶属度函数的分类,最为简单常用的即是(半)梯形函数:
全栈程序员站长
2022/11/17
5820
模糊隶属函数确定例题_高斯隶属度函数
matlab 求矩阵秩,求Matlab中矩阵的秩和迹 | 学步园[通俗易懂]
0.8147 0.2785 0.9572 0.7922 0.6787 0.7060
全栈程序员站长
2022/08/23
5950
matlab 稀疏矩阵 乘法,Matlab 矩阵运算[通俗易懂]
说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab中矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵。Matlab的运算是在矩阵意义下进行的,这里所提到的是狭义上的矩阵,即通常意义上的矩阵。
全栈程序员站长
2022/09/12
3.1K0
MATLAB(2)–MATLAB矩阵的表示
利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵的顺序输入各元素,同一行的各元素之间用逗号或者空格分隔,不同的元素之间用分号分隔。
全栈程序员站长
2022/09/12
1.2K0
MATLAB(2)–MATLAB矩阵的表示
矩阵的模的平方matlab,matlab求矩阵、向量的模
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146721.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/28
8270
MATLAB中求矩阵的逆矩阵方法(2种)「建议收藏」
第一步:打开matlab之后,在命令行窗口中输入a=[1 2 3;4 5 6; 7 8 9],新建一个a方矩阵,如下图所示:
全栈程序员站长
2022/09/25
3.1K0
MATLAB中求矩阵的逆矩阵方法(2种)「建议收藏」
【MATLAB】矩阵操作 ( 矩阵构造 | 矩阵运算 )
设置一个已经给定的矩阵的行列重复次数 , 根据给定的矩阵 , 进行指定的重复 , 生成新矩阵 ;
韩曙亮
2023/03/29
1.3K0
【MATLAB】矩阵操作 ( 矩阵构造 | 矩阵运算 )
MATLAB矩阵运算
MATLAB以矩阵作为数据操作的基本单位,这使得矩阵运算变得非常简捷、方便、高效。矩阵是由m×n个数av (i=1,2,…,m; j = 1,2,…,n)排成的m行n列数表,记成:
全栈程序员站长
2022/09/12
1.2K0
MATLAB矩阵运算
matlab 矩阵除法
Matlab提供了两种除法运算:左除(/)和右除(/)。 一般情况下,x=a/b是方程a*x =b的解,而x=b/a是方程x*a=b的解。 例:a=[1 2 3; 4 2 6; 7 4 9] b=[4; 1; 2]; x=a/b 则显示:x= -1.5000 2.0000 0.5000 如果a为非奇异矩阵,则a/b和b/a可通过a的逆矩阵与b阵得到: a/b = inv(a)*b b/a = b*inv(a)
全栈程序员站长
2022/09/07
1.6K0
MATLAB矩阵生成
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153010.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/12
8170
matlab 求矩阵秩,用MATLAB编程求矩阵的秩
我明白了,就是极大无关组,我的这个程序把所有的基都写出来了,你只要选一个就可以,还对两种矩形的矩阵(例如2×3,3×2都测试了);如果谁会优化这个程序的会更好!
全栈程序员站长
2022/08/23
7130
用matlab求逆矩阵的方式_matlab矩阵转置命令
如何用MATLAB求逆矩阵以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
全栈程序员站长
2022/09/27
1.4K0
用matlab求逆矩阵的方式_matlab矩阵转置命令
Matlab矩阵大全
(1)将二维矩阵A转化成一维矩阵(列向量):Matlab 默认将其转化成列向量,需要行向量转置即可。
全栈程序员站长
2022/09/12
1.2K0
Matlab矩阵大全
matlab矩阵拼接
3 4 3 4]
全栈程序员站长
2022/09/12
1.9K0
matlab输出矩阵格式_matlab中uint8函数用法
1、uint8与double double函数只是将读入图像的uint8数据转换为double类型,一般不使用;常用的是im2double函数,将 uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变。 MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double。因此 I2=im2double(I1) :把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生 溢出。默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型 (uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。 im2double():将图象数组转换成double精度类型 im2uint8():将图象数组转换成unit8类型 im2uint16():将图象数组转换成unit16类型 2、uint8和im2uint8 在数据类型转换时候uint8和im2uint8的区别,uint8的操作仅仅是将一个double类型的小数点后面的部 分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所 有其他值乘以255。 图像数据在计算前需要转换为double,以保证精度;很多矩阵数据也都是double的。要想显示其,必须先 转换为图像的标准数据格式。如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间) ,那么可以直接使用im2uint8。如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255( 超过255的按255)。最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double) 3、double类型图像的显示 图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精度。很多矩阵的很多矩 阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式。如果直接运行imshow(I),我们会 发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都 是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被 不正常得显示为白色图像了。具体方法有: imshow(I/256); ———-将图像矩阵转化到0-1之间 imshow(I,[]); ———-自动调整数据的范围以便于显示 (注意这里,必须是灰度图,否 则不行) imshow(uint8(I)); imshow(mat2gray(I)); 上面的mat2gray是将最终获得的矩阵转化为灰度图像。常用的为: A = im2uint8(mat2gray(result)) 这样就将result矩阵转化为uint8类型的图像。
全栈程序员站长
2022/09/30
2.8K0
matlab求矩阵的尺寸
使用size函数A = imread('lenna.jpg');[h w] = size(A);解决方法:报错的原因是函数返回值得数量不一致,查看函数返回值数量和调用函数时接收返回值的数量是不是一致,修改一致即可解决方法:报错的原因是函数返回值得数量不一致,查看函数返回值数量和调用函数时接收返回值的数量是不是一致,修改一致即可解决方法:报错的原因是函数返回值得数量不一致,查看函数返回值数量和调用函数时接收返回值的数量是不是一致,修改一致即可解决方法:报错的原因是函数返回值得数量不一致,查看函数返回值数量和调
狼啸风云
2019/04/17
1K0
点击加载更多

相似问题

基于顶点隶属度的r GGally色边

11

如何在MATLAB中测试结构数组的隶属度?

10

压缩隶属度表

24

Python计算顶点度矩阵

67

matlab中余弦相似度的矢量化

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档