精华内容
下载资源
问答
  • b=a>0就是找出非零项>> a=floor(rand(10,10)*10)a =9 9 9 4 1 3 7 1 2 08 9 7 1 9 7 8 1 0 19 9 0 5 0 7 7 ...

    b=a>0就是找出非零项

    >> a=floor(rand(10,10)*10)

    a =

    9     9     9     4     1     3     7     1     2     0

    8     9     7     1     9     7     8     1     0     1

    9     9     0     5     0     7     7     6     3     7

    0     7     9     6     5     6     3     6     8     0

    8     3     0     5     9     5     2     8     0     6

    9     2     3     7     0     7     3     6     1     7

    4     6     0     3     5     7     0     1     6     4

    3     5     3     4     5     5     3     1     0     9

    1     3     6     2     3     9     8     3     4     4

    5     9     2     7     3     1     6     6     4     2

    >> b=a>0

    b =

    1     1     1     1     1     1     1     1     1     0

    1     1     1     1     1     1     1     1     0     1

    1     1     0     1     0     1     1     1     1     1

    0     1     1     1     1     1     1     1     1     0

    1     1     0     1     1     1     1     1     0     1

    1     1     1     1     0     1     1     1     1     1

    1     1     0     1     1     1     0     1     1     1

    1     1     1     1     1     1     1     1     0     1

    1     1     1     1     1     1     1     1     1     1

    1     1     1     1     1     1     1     1     1     1

    >> s=sum(b')

    s =

    9     9     8     8     8     9     8     9    10    10

    >>

    展开全文
  • 额,这题目修改了几次,还是显得拗口,还是小例子来说明吧:两...【方法】由于每行乘以不同的数,所以呢并不能简单的A*B,首先需要对B进行一下处理,即repmat函数,MATLAB中给出的解释如下:repmat ...

    额,这个题目修改了几次,还是显得拗口,还是用一个小例子来说明吧:

    两个矩阵:

    A=[ 3 4 6

    6 5 4

    6 8 6

    ]

    B=[ 2.3 5.4 9.1]

    目标是要实现:第一行,3,4,6乘以2.3;第二行的6,5,4乘以5.4;第三行的6,8,6乘以9.1。

    【方法】由于每行都乘以不同的数,所以呢并不能简单的A*B,首先需要对B进行一下处理,即用repmat函数,MATLAB中给出的解释如下:

    repmat - Replicate and tile array

    This MATLAB function returns an n-by-n tiling of A.

    B = repmat(A,n)

    B = repmat(A,sz1,sz2,...,szN)

    B = repmat(A,sz)

    函数的用途,就是可以把一个现有的矩阵进行扩展,帮助中有许多例子,拿一个最好理解的来看:

    对于我们的例子呢,要做的就是先将B,这个一行三列的行向量进行扩展:

    B=repmat(B',1,3);

    B =

    2.3000 2.3000 2.3000

    5.4000 5.4000 5.4000

    9.1000 9.1000 9.1000

    解释一下上面这句的意思,repmat(B',1,3); 就是将原来的一行三列向量变成三行一列向量后,横向不复制,竖向复制三次,就变成三行三列的矩阵了

    然后呢,

    C=A.*B

    进行A与更新后的B点乘即可实现咱们最开始要达到的目的了

    C =

    6.9000   9.2000   13.8000

    32.4000 27.0000 21.6000

    54.6000 72.8000 54.6000

    展开全文
  • 如果这不是一可行的select,一种方法是使用mat2cell或num2cell将收集到单元格中,然后使用cellfun操作所得到的单元arrays。作为一例子,假设你想对matrixM的进行求和。 你可以简单地使用sum来做到这一点...

    像sum和prod这样的内置操作已经可以跨行或列操作了,所以你可以重构你正在使用的函数来利用它。

    如果这不是一个可行的select,一种方法是使用mat2cell或num2cell将行或列收集到单元格中,然后使用cellfun操作所得到的单元arrays。

    作为一个例子,假设你想对matrixM的列进行求和。 你可以简单地使用sum来做到这一点:

    M = magic(10); %# A 10-by-10 matrix columnSums = sum(M, 1); %# A 1-by-10 vector of sums for each column

    这里是你如何使用更复杂的num2cell / cellfun选项来做到这一点:

    M = magic(10); %# A 10-by-10 matrix C = num2cell(M, 1); %# Collect the columns into cells columnSums = cellfun(@sum, C); %# A 1-by-10 vector of sums for each cell

    你可能想要更晦涩的Matlab函数bsxfun 。 从Matlab文档中,bsxfun“将由函数handle fun指定的逐个元素的二进制操作应用于数组A和B,并启用单例扩展。

    上面提到的@gnovice和sum和其他基本函数已经在第一个非单实体维度上进行了操作(即,如果有多行,那么行,如果只有一行,则列;或者如果较低维度都具有大小== 1 )。 但是,bsxfun适用于任何函数,包括(特别是)用户定义的函数。

    例如,假设您有一个matrixA和一个行向量BEg,假设:

    A = [1 2 3; 4 5 6; 7 8 9] B = [0 1 2]

    你想要一个函数power_by_col,它返回一个向量C中的所有元素到B的对应列的权力。

    从上面的例子中,C是一个3×3的matrix:

    C = [1^0 2^1 3^2; 4^0 5^1 6^2; 7^0 8^1 9^2]

    C = [1 2 9; 1 5 36; 1 8 81]

    你可以使用repmat来实现这个蛮力的方式:

    C = A.^repmat(B, size(A, 1), 1)

    或者你可以用bsxfun这个优雅的方式,在内部处理repmat步骤:

    C = bsxfun(@(x,y) x.^y, A, B)

    所以bsxfun为您节省了一些步骤(您不需要明确计算A的尺寸)。 然而,在我的一些非正式testing中,事实certificate,如果要应用的function(如上面的功率函数)很简单,repmat的速度大概是它的两倍。 所以你需要select你是否想要简单或速度。

    我不能评论这是多高效,但这里有一个解决scheme:

    applyToGivenRow = @(func, matrix) @(row) func(matrix(row, :)) applyToRows = @(func, matrix) arrayfun(applyToGivenRow(func, matrix), 1:size(matrix,1))' % Example myMx = [1 2 3; 4 5 6; 7 8 9]; myFunc = @sum; applyToRows(myFunc, myMx)

    基于Alex的回答 ,这是一个更通用的function:

    applyToGivenRow = @(func, matrix) @(row) func(matrix(row, :)); newApplyToRows = @(func, matrix) arrayfun(applyToGivenRow(func, matrix), 1:size(matrix,1), 'UniformOutput', false)'; takeAll = @(x) reshape([x{:}], size(x{1},2), size(x,1))'; genericApplyToRows = @(func, matrix) takeAll(newApplyToRows(func, matrix));

    这两个函数之间的比较:

    >> % Example myMx = [1 2 3; 4 5 6; 7 8 9]; myFunc = @(x) [mean(x), std(x), sum(x), length(x)]; >> genericApplyToRows(myFunc, myMx) ans = 2 1 6 3 5 1 15 3 8 1 24 3 >> applyToRows(myFunc, myMx) ??? Error using ==> arrayfun Non-scalar in Uniform output, at index 1, output 1. Set 'UniformOutput' to false. Error in ==> @(func,matrix)arrayfun(applyToGivenRow(func,matrix),1:size(matrix,1))'

    为了完整性/兴趣,我想补充一点,matlab确实有一个函数,允许您对每行数据而不是每个元素进行操作。 它被称为rowfun ( http://www.mathworks.se/help/matlab/ref/rowfun.html ),但唯一的“问题”是它在表上运行( http://www.mathworks.se/help /matlab/ref/table.html )而不是matrix 。

    为了回答这个问题,从r2016b开始,MATLAB将隐含地扩展单例尺寸,在很多情况下不需要bsxfun 。

    从r2016b发行说明 :

    隐式扩展:将元素操作和函数应用于具有长度为1的维度的自动扩展的数组

    隐式扩展是标量扩展的泛化。 通过标量扩展,标量扩展为与另一个数组相同的大小,以便于按元素操作。 通过隐式扩展,只要数组具有兼容的大小,这里列出的按元素的操作符和函数就可以隐式地扩展它们的input大小。 如果对于每个维度,input的维度大小相同或其中之一为1,则两个arrays具有兼容的大小。有关更多信息,请参阅基本操作的兼容arrays大小以及arrays与matrix操作。

    Element-wise arithmetic operators — +, -, .*, .^, ./, .\ Relational operators — , >=, ==, ~= Logical operators — &, |, xor Bit-wise functions — bitand, bitor, bitxor Elementary math functions — max, min, mod, rem, hypot, atan2, atan2d

    例如,您可以计算matrixA中每列的平均值,然后用A – 均值(A)从每列中减去平均值的向量。

    以前,这个function可以通过bsxfun函数获得。 现在build议您将bsxfun的大部分用法直接调用到支持隐式扩展的函数和运算符。 与使用bsxfun相比,隐式扩展提供了更快的速度,更好的内存使用,并提高了代码的可读性。

    使用最新版本的Matlab,您可以使用Table数据结构来获得优势。 甚至有一个“rowfun”操作,但我发现这样做更容易:

    a = magic(6); incrementRow = cell2mat(cellfun(@(x) x+1,table2cell(table(a)),'UniformOutput',0))

    或者这是一个旧的,我不需要表格,旧的Matlab版本。

    dataBinner = cell2mat(arrayfun(@(x) Binner(a(x,:),2)',1:size(a,1),'UniformOutput',0)')

    接受的答案似乎是先转换为单元格,然后使用cellfun来操作所有的单元格。 我不知道具体的应用程序,但总的来说,我认为使用bsxfun在matrix上运行会更有效率。 基本上bsxfun在两个数组之间应用一个元素的操作。 所以,如果你想乘以一个nxm向量中的每个项目乘以一个nxm向量中的每个项目来获得一个nxm数组,你可以使用:

    vec1 = [ stuff ]; % nx 1 vector vec2 = [ stuff ]; $ mx 1 vector result = bsxfun('times', vec1.', vec2);

    这将给你称为resultmatrix,其中(i,j)项将是vec1的第i个元素乘以vec1的第j个元素。

    你可以使用bsxfun来实现各种内置函数,你可以声明你自己的函数。 该文档有许多内置函数的列表,但基本上你可以命名任何接受两个数组(vector或matrix)作为参数的函数并使其工作。

    上面的答案都不是“开箱即用”的,但是,通过复制其他答案的思想获得的以下function是可行的:

    apply_func_2_cols = @(f,M) cell2mat(cellfun(f,num2cell(M,1), 'UniformOutput',0));

    它取一个函数f并将其应用于matrixM每一列。

    举个例子:

    f = @(v) [0 1;1 0]*v + [0 0.1]'; apply_func_2_cols(f,[0 0 1 1;0 1 0 1]) ans = 0.00000 1.00000 0.00000 1.00000 0.10000 0.10000 1.10000 1.10000

    在寻求如何计算matrix的行和时,偶然发现了这个问题/答案。

    我只想补充一点,Matlab的SUM函数实际上支持对一个给定的维度进行求和,也就是具有两个维度的标准matrix。

    所以要计算列的总和呢:

    colsum = sum(M) % or sum(M, 1)

    对于行数,简单的做

    rowsum = sum(M, 2)

    我敢打赌,这是比编程循环和转换为单元格:)

    所有这些都可以在SUM的matlab帮助中find。

    如果你知道你的行的长度,你可以做这样的事情:

    a=rand(9,3); b=rand(9,3); arrayfun(@(x1,x2,y1,y2,z1,z2) line([x1,x2],[y1,y2],[z1,z2]) , a(:,1),b(:,1),a(:,2),b(:,2),a(:,3),b(:,3) )

    展开全文
  • 由于Matlab是按照优先存储数据,...基本思想:每列5个元素对应的select_minQ-1乘以5,计算每列最后一个元素的坐标位置; #由于matlab没有index=0; select_minQ-1表示最后一个元素位置,加上[1;2;3;4;5],表示...

    由于Matlab是按照列优先存储数据,矩阵实际也是一维数组:
    对于零矩阵C[5*11]是5行11列. 使[1;2;3;4;5]行的 [3;4;6;8;9]列,五个元素为1如下代码:
    基本思想:每列5个元素对应的列select_minQ-1乘以5,计算每列最后一个元素的坐标位置;
    #由于matlab没有index=0;
    select_minQ-1表示最后一个元素位置,加上[1;2;3;4;5],表示下一行的位置。

    select_minQ = [3;4;6;8;9];
    select_C = zeros(5,11);
    select_index = ([1;2;3;4;5]) + (select_minQ-1)*5;
    select_C(select_index) = 1;
    

    select_C = zeros(5,11):
    0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0

    select_C(select_index) = 1 :
    0 0 1 0 0 0 0 0 0 0 0
    0 0 0 1 0 0 0 0 0 0 0
    0 0 0 0 0 1 0 0 0 0 0
    0 0 0 0 0 0 0 1 0 0 0
    0 0 0 0 0 0 0 0 1 0 0

    展开全文
  • 4])中的列乘以矩阵B ([4 3], [2 1])中的相应,并对得出的矩阵求和。 我想出了以下代码:C = zeros(size(A));for i = 1 : size(A, 1)C = C + A(:, i) * B(i, :);end可以使用一些数学技巧或Matlab...
  • C=A./BC =3 3 3注:MATLAB矩阵的运算中,“/”号和“*”号代表矩阵之间的乘法与除法,对应元62616964757a686964616fe59b9ee7ad9431333366306563素之间的乘除法需要使用“./”和“.*”。另外数与矩阵之间的乘法...
  • matlab beginner,经常会遇到这样的疑问,Matlab矩阵元素引用真灵活,我都看花了眼了!还有数组、矩阵、向量、行列式有什么区别呢?既然有需求,就有市场,那下面我们详细分析下,期望对初学者的有些启示作用。先...
  • 此提交包含两用于计算 EXPM(t*A)*b 的函数,无需明确形成 EXPM(t*A),其中 A 是 n×n 矩阵,b 是 n×1 向量。 这是计算矩阵指数对向量的作用的问题。 EXPMV(t,A,B, 计算 EXPM(t*A)*B,而 EXPMV_TSPAN(A,b,t0,tmax...
  • 所以 第1,当m == 1,M + 1 =1 * 2 7中,如果M == MAXJ,M-1 = column7 * 2 我知道mod允许使用倍数,但是当我改变矩阵大小时,我仍然遇到同样的问题。 难以说明问题。请告诉我该如何澄清它,非常感谢您的...
  • 矢量化方法你可以在A和B的转置之间进行矩阵乘法,然后沿着dim-2求和,最后L – 进行元素划分.result = sum(A.*B.',2)./L标杆本节介绍了针对基于循环的方法的提议方法的运行时和加速测试,如问题的早期部分所....
  • MATLAB矩阵及其运算

    千次阅读 2021-04-18 05:09:55
    第2章MATLAB矩阵及其运算2.1变量和数据操作2.2MATLAB矩阵2.3MATLAB运算2.4矩阵分析2.5矩阵的超越函数2.6字符串2.7结构数据和单元数据2.8稀疏矩阵2.1变量和数据操作2.1.1变量与赋值1.变量命名在MATLAB 6.5中,变量名...
  • 用矩阵矩阵的乘法代替常数与矩阵的乘法 (matlab中的一小trick) 常数乘以矩阵,正常的计算方法如下 但是如果,你在matlab当中进行相应操作(如下) 殊不知,matlab并不是按照大家常见的这种方法计算的,而是...
  • 矩阵M是一 mxn 的矩阵,现在要给M矩阵的第一列都要乘上10,使第一扩大10倍,那肿么呢?我第一时间的是:M(:,1) = M(:,1)*10; //错误的但是这错了,结果是不对的这里要点乘才,所以正确的写法是:M(:...
  • 您的算法非常慢,因为如果有(…)必须在第一次迭代中检查n项目,则在第二次迭代中检查n-1项目,直到在上一次迭代中检查单个项目.因此,它必须大致进行n ^ 2/2比较,因此运行时间是二次函数,作为输入向量的长度的函数...
  • Matlab:矩阵用方括号[]表示,元素之间”,” 或者 空格 隔开,之间分号“;”隔开:mat = [1 2 3 4;4 5 6 7]或者mat = [1,2,3,4;4,5,6,7]向量:row=[1 2 3 4]向量(向量的转置):column=[1 2 3 4]'获得...
  • 或者其中一或多个矩阵为标量C = A±B:C(m,n) = A(m,n) + B(m,n)C = A±x:C(m,n) = A(m,n) + x矩阵运算满足加法法则,交换律、结合律2.矩阵的乘法运算数与矩阵的乘法:由于MATLAB中单数据都是以标量的形式存在...
  • 第二步:相消,得到乘数,该行每个元素乘以对应的乘数,与“第一”相减。 整个工程分3文件:main.m change.m add_eliminate.m 基于matlab m语言 目的:解决计算机数值方法的课后作业 main.m文件源码...
  • 创建一差分矩阵 D,当乘以另一个矩阵时,它会在 obs 上取差。 类型“圆形”或“无”。 默认值“无”。 例子B = [2:1:8;sin(linspace(0,pi,7))] 乙 = 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 0 ...
  • 线性矩阵不等式(LMI)工具箱是求解一般线性矩阵不等式问题的一高性能软件包,提供了确定、处理和数值求解线性矩阵不等式的一些工具。
  • matlab向量与矩阵的运算,讲述用matlab来描述向量和矩阵运算
  • Matlab 矩阵运算

    2021-04-22 03:29:59
    Copyright 2008说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵Matlab的运算是在矩阵意义下进行的,这里所...
  • 有流量的可以直接戳视频二狗在用matlab学习编程过程中,发现matlab中有大量矩阵运算,矩阵的知识了解不到位,在学习算法的过程中无法找到合适的解决问题的方法或者出现编程错误。好比英语发音规则都不懂,...
  • matlab代码expmv ...A,并且只使用矩阵向量与 AA^* 的乘积。 函数 test.m 运行代码的简单测试。 有关底层算法的详细信息可以在 AH Al-Mohy 和 NJ Higham,“”SIAM J. Sci。 计算,33(2):488--511,2011。
  • % 如果 'x' 是长度 'nx' 的向量,则 conv_mtx(x,nh) 给出一 toeplitz % 大小 (nx+nh-1) 乘以 (nh) 的矩阵“X”。 'nh' 是向量的长度% 'h' 与 'x' 卷积。 因此最终'X*h' 与 conv(x,h) 相同。 % 如果 'x' ...
  • matlab矩阵数除以一

    万次阅读 2015-01-12 15:51:48
    例如:用a数除以x中相对应的数 x=[5 10 6 8 16 6 8 8 22 11]; a=[4 4 4 5 4 4 4 4 3 4 6 8 6 2 6 8 8 6 8 6 4 4 4 4 6 4 4 4 6 4 4 6 6 4 6 6 6 4 7 4 10 14 14 10 12 12 12 10 14 12 3 5 5 3 ...
  • >> A=[1,2;3,4]A =1 23 4>> B=[0,1;1,0]B =0 11 0>> C=[i,1+i; 2i, 1-i]C =0 + 1.0000i 1.0000 + 1.0000i0 + 2.0000i 1.0000 - 1.0000i>> A' % 共轭转置ans =...
  • % 首先产生5阶两位随机整数矩阵A产生均值0.6、方差0.1的5阶正态分布随机矩阵B,最后验证(A+B)I=IA+BI(I单位矩阵)。 A = fix(10+(99-10+1)*rand(5)) % rand(5)产生一5x5的随机矩阵,随机数在0-1之间 B =...
  • 问题:一K×M的矩阵,第一是1,其它都是0,从最后一开始,循环一次,最后一的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一的1往右边移一位。上一溢出时,上上一的1移动一位,...
  • 此目录包含用于快速乘以 Toeplitz 矩阵乘以向量的 MATLAB 函数。 通过使用这些例程,您可以避免存储整个矩阵(使用长度 n 的向量而不是大小 n*n 的矩阵),并且还可以显着加速乘法。 这里使用的算法在 O(n*...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,665
精华内容 2,666
关键字:

用matlab做矩阵c.其元素为a的元素乘以每个元素的行标再乘以每个元素的列标

matlab 订阅
友情链接: utfb.rar