matlab matlab矩阵中元素表示的元素也为矩阵 怎么表示

苹果/安卓/wp
积分 370, 距离下一级还需 80 积分
权限: 自定义头衔, 签名中使用图片
道具: 彩虹炫, 雷达卡, 热点灯, 雷鸣之声, 涂鸦板, 金钱卡, 显身卡, 匿名卡下一级可获得
道具: 抢沙发
购买后可立即获得
权限: 隐身
道具: 金钱卡, 雷鸣之声, 彩虹炫, 雷达卡, 涂鸦板, 热点灯
开心签到天数: 33 天连续签到: 1 天[LV.5]常住居民I
本帖最后由 v311 于
09:07 编辑
大家好,请教一下大家,我用MATLAB得到的EXCEL中矩阵为什么是这个样子的,矩阵的每一个元素都有一个方括号?这是什么格式呢?而且不能进行矩阵运算?我要矩阵运算的话怎么解决这个问题呢
小弟是M新手哈,跪求各位指教啦
我是用excel link把矩阵导进去的哦
载入中......
09:03:25 上传
你的a,b 都不是矩阵,而是矩阵的集合,是用大括号刮起来的&&{[1],[2],[3]}
根据规定进行奖励
总评分:&经验 + 40&
论坛币 + 20&
学术水平 + 2&
热心指数 + 2&
信用等级 + 2&
airways1 发表于
你的a,b 都不是矩阵,而是矩阵的集合,是用大括号刮起来的&&{[1],[2],[3]}啊,谢谢,我懂了,我后来发现用a=cell2mat(a)就可以转换过来
用excel直接生成的空间矩阵?
我不懂啊,怎么把那个括号去掉呢,我试了一下那个命令,不行呢。
16:22:50 上传
论坛好贴推荐
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师matlab中怎么定义一个5*6的矩阵,矩阵元素全为c?_百度知道
matlab中怎么定义一个5*6的矩阵,矩阵元素全为c?
matlab中定义一个5*6的矩阵,矩阵元素全为c;实现方法如下:a=ones(5,6)*c;ones产生全1数组,zeros产生全零数组。ones(a,b)产生a行b列全1数组ones(a)产生a行a列全1数组例如:ones(1,3)产生1行3列全1数组[1 1 1]ones(2)产生
其他类似问题
为您推荐:
提问者采纳
a=ones(5,6)*c;%其中ones(5,6)是产生5*6的全1矩阵
您可能关注的推广
matlab的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁matlab程序如何表示一个元素都是矩阵的列向量,元素的个数为100,矩阵元素含有变量。, matlab程序如何表示一个元素都
matlab程序如何表示一个元素都是矩阵的列向量,元素的个数为100,矩阵元素含有变量。
xiaolongkufang matlab程序如何表示一个元素都是矩阵的列向量,元素的个数为100,矩阵元素含有变量。
a=cell(n,1)可以把a初始化为一个n行1常础败飞汁读伴嫂宝讥列的空cell类型数据。若要给其赋值可以用a{1,1}=rand(5);这样就等于在a的一行一列的单元中存储一个随机的5*5的方阵。cell单元中第个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。你的问题可以用a=cell(100,1)。机器学习中经常要求矩阵所有元素的平方和&br&测试代码&br&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&k&&function&/span&&span class=&w&& &/span&&span class=&nf&&test&/span&&span class=&p&&()&/span&&span class=&w&&&/span&
&span class=&w&&
&/span&&span class=&n&&A&/span&&span class=&p&&=&/span&&span class=&nb&&rand&/span&&span class=&p&&(&/span&&span class=&mi&&7777&/span&&span class=&p&&,&/span&&span class=&mi&&7777&/span&&span class=&p&&);&/span&
&span class=&n&&fprintf&/span&&span class=&p&&(&/span&&span class=&s&&'Loop1 :%f\n'&/span&&span class=&p&&,&/span&&span class=&n&&timeit&/span&&span class=&p&&(@()&/span&&span class=&n&&bench_loop1&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&p&&)));&/span&
&span class=&n&&fprintf&/span&&span class=&p&&(&/span&&span class=&s&&'Loop2 :%f\n'&/span&&span class=&p&&,&/span&&span class=&n&&timeit&/span&&span class=&p&&(@()&/span&&span class=&n&&bench_loop2&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&p&&)));&/span&
&span class=&n&&fprintf&/span&&span class=&p&&(&/span&&span class=&s&&'Direct:%f\n'&/span&&span class=&p&&,&/span&&span class=&n&&timeit&/span&&span class=&p&&(@()&/span&&span class=&n&&bench_sum&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&p&&)));&/span&
&span class=&k&&end&/span&
&span class=&k&&function&/span&&span class=&w&& &/span&s&span class=&p&&=&/span&&span class=&nf&&bench_loop1&/span&&span class=&p&&(&/span&A&span class=&p&&)&/span&&span class=&w&&&/span&
&span class=&w&&
&/span&&span class=&n&&v&/span&&span class=&p&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&p&&[&/span&&span class=&o&&~&/span&&span class=&p&&,&/span&&span class=&n&&N&/span&&span class=&p&&]=&/span&&span class=&nb&&size&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&p&&);&/span&
&span class=&k&&for&/span& &span class=&nb&&i&/span&&span class=&p&&=&/span&&span class=&mi&&1&/span&&span class=&p&&:&/span&&span class=&n&&N&/span&
&span class=&n&&v&/span&&span class=&p&&=&/span&&span class=&n&&v&/span&&span class=&o&&+&/span&&span class=&n&&A&/span&&span class=&p&&(:,&/span&&span class=&nb&&i&/span&&span class=&p&&)&/span&&span class=&o&&.^&/span&&span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&k&&end&/span&
&span class=&n&&s&/span&&span class=&p&&=&/span&&span class=&n&&sum&/span&&span class=&p&&(&/span&&span class=&n&&v&/span&&span class=&p&&);&/span&
&span class=&k&&end&/span&
&span class=&k&&function&/span&&span class=&w&& &/span&s&span class=&p&&=&/span&&span class=&nf&&bench_loop2&/span&&span class=&p&&(&/span&A&span class=&p&&)&/span&&span class=&w&&&/span&
&span class=&w&&
&/span&&span class=&n&&s&/span&&span class=&p&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&p&&[&/span&&span class=&o&&~&/span&&span class=&p&&,&/span&&span class=&n&&N&/span&&span class=&p&&]=&/span&&span class=&nb&&size&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&p&&);&/span&
&span class=&k&&for&/span& &span class=&nb&&i&/span&&span class=&p&&=&/span&&span class=&mi&&1&/span&&span class=&p&&:&/span&&span class=&n&&N&/span&
&span class=&n&&s&/span&&span class=&p&&=&/span&&span class=&n&&s&/span&&span class=&o&&+&/span&&span class=&n&&sum&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&p&&(:,&/span&&span class=&nb&&i&/span&&span class=&p&&)&/span&&span class=&o&&.^&/span&&span class=&mi&&2&/span&&span class=&p&&);&/span&
&span class=&k&&end&/span&
&span class=&k&&end&/span&
&span class=&k&&function&/span&&span class=&w&& &/span&s&span class=&p&&=&/span&&span class=&nf&&bench_sum&/span&&span class=&p&&(&/span&A&span class=&p&&)&/span&&span class=&w&&&/span&
&span class=&w&&
&/span&&span class=&n&&s&/span&&span class=&p&&=&/span&&span class=&n&&sum&/span&&span class=&p&&(&/span&&span class=&n&&sum&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&o&&.^&/span&&span class=&mi&&2&/span&&span class=&p&&));&/span&
&span class=&k&&end&/span&
&/code&&/pre&&/div&结果&br&&div class=&highlight&&&pre&&code class=&language-text&&&& test
Loop1 :0.056253
Loop2 :0.138789
Direct:0.214043
&/code&&/pre&&/div&分析及疑惑&br&&blockquote&看了标题一定会有人问我为什么不向量化,所以我也用了一个最向量化(也是最直接最常见)的写法来对比,事实表明在这里向量化反而是最慢的,原因应该是A.^2产生了一个巨大的中间矩阵,在分配内存上花了很多时间。所以Matlab也并不是什么时候都是向量化比循环好&br&但两种循环写法性能差一倍多就完全搞不懂了&br&显然不是上面所说的中间变量占内存的问题,而且更快的第一种写法实际上使用了两倍于第二种的内存(虽然都很小),空间局部性也不如第二种好&br&调用sum()的overhead也不可能是原因,即使有overhead也不至于大到相当于几千次加法的时间&br&如果是解释器发现了循环可以并行化的话,不至于智障到第一种写法能发现,第二种写法就发现不了吧……&br&而且由于Matlab程序无法反汇编/反字节码,也不能通过这种途径得知到底发生了什么&/blockquote&顺带用Python的numpy写了一模一样的代码(代码略),用CPython运行的结果如下&br&&div class=&highlight&&&pre&&code class=&language-text&&$ python test.py
&/code&&/pre&&/div&第一种写法稍快,但差距远没有Matlab中的大,另外第二种写法还显著地比Matlab里快,什么鬼?(两边的矩阵库都是mkl)
机器学习中经常要求矩阵所有元素的平方和测试代码function test()
fprintf('Loop1 :%f\n',timeit(@()bench_loop1(A)));
fprintf('Loop2 :%f\n',timeit(@()bench_loop2(A)));
fprintf('Direct:%f\n',timeit(@()bench_sum(A)));
function s=bench_loop1(A)
[~,N]=size(A);
v=v+A(:,i).^2;
function s=bench_loop2(A)
[~,N]=size(A);
s=s+sum(A(:,i).^2);
function s=bench_sum(A)
s=sum(sum(A.^2));
原因前面的人都说了,bench_loop1不需要用一个临时变量存储A(:,i).^2的结果,而bench_loop2需要。的答案中指出,A(:,:)这样的索引会复制A中所有数据。而A(:)是不复制的,即数据是共享的。这一点我在另一个问题中提到过。此外,MATLAB优化最好的运算(之一)——矩阵乘法——是值得信赖的。所以,s = A(:).' * A(:);
试验了一下多种写法的速度,从慢到快排列。&br&A为7777阶随机方阵,时间为100次运行平均用时,所用Matlab版本为R2013a。&br&&br&&ul&&li&sum(sum(A.^2)):0.273 s&/li&&li&sum(A(:).^2):0.272 s,跟前一种其实没有区别&br&&/li&&li&dot(A(:), A(:)):0.251 s,跟前一种也几乎没有区别&/li&&li&题主的loop2:0.160 s&/li&&li&题主的loop1:0.100 s&/li&&li&&b&A(:)' * A(:):0.031 s&/b&,明显比其它写法快&/li&&/ul&
试验了一下多种写法的速度,从慢到快排列。A为7777阶随机方阵,时间为100次运行平均用时,所用Matlab版本为R2013a。sum(sum(A.^2)):0.273 ssum(A(:).^2):0.272 s,跟前一种其实没有区别dot(A(:), A(:)):0.251 s,跟前一种也几乎没有区别题主的loop2:0.1…
bench_loop1比bench_loop2快一倍的原因,是因为在N次循环中,每次sum都需要开辟N-by-1内存空间,运算完s=s+sum(XXX)之后再销毁。开辟和销毁N-by-1的内存空间也需要O(N)的时间。测试如下:&br&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&n&&tic&/span&&span class=&p&&;&/span&
&span class=&n&&A&/span&&span class=&p&&=&/span&&span class=&nb&&zeros&/span&&span class=&p&&(&/span&&span class=&mi&&7000&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&);&/span&
&span class=&n&&toc&/span&&span class=&p&&;&/span&
&span class=&n&&tic&/span&&span class=&p&&;&/span&
&span class=&n&&b&/span&&span class=&p&&=&/span&&span class=&n&&sum&/span&&span class=&p&&(&/span&&span class=&n&&A&/span&&span class=&p&&);&/span&
&span class=&n&&toc&/span&&span class=&p&&;&/span&
&span class=&n&&Elapsed&/span& &span class=&n&&time&/span& &span class=&n&&is&/span& &span class=&mf&&0.005106&/span& &span class=&n&&seconds&/span&&span class=&p&&.&/span&
&span class=&n&&Elapsed&/span& &span class=&n&&time&/span& &span class=&n&&is&/span& &span class=&mf&&0.004475&/span& &span class=&n&&seconds&/span&&span class=&p&&.&/span&
&/code&&/pre&&/div&
bench_loop1比bench_loop2快一倍的原因,是因为在N次循环中,每次sum都需要开辟N-by-1内存空间,运算完s=s+sum(XXX)之后再销毁。开辟和销毁N-by-1的内存空间也需要O(N)的时间。测试如下:
A=zeros(7000,1);
Elapsed time is…
已有帐号?
无法登录?
社交帐号登录
There is a way.小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
matlab,比较三矩阵元素大小并输出较大的数组成的矩阵
在matlab中比较对应元素大小,输出应为D=
matlab新手一个,请问怎么做啊~~~~
好像要用循环?
谢谢,,很大帮助,问题已经解决
研究生必备与500万研究生在线互动!
扫描下载送金币

我要回帖

更多关于 matlab矩阵中元素表示 的文章

 

随机推荐