什么是 。'附加到列表末尾用于bsxfun吗?

时间:2014-02-17 07:32:16

标签: matlab

从bsxfun的Matlab文档中给出了一个例子:

fun = @(A,B) A.*sin(B);
A = 1:7;
B = pi*[0 1/4 1/3 1/2 2/3 3/4 1].'; % what is the .' at the end?
C = bsxfun(fun,A,B)

我理解如何使用bsxfun,但我不明白是什么。呢?我理解'要转置,但是什么是。'?

2 个答案:

答案 0 :(得分:4)

来自here

  

b = a.' 计算矩阵a非共轭转置并返回   结果在b

通过以下示例查看不同之处:

>> [1+6i 7-3i 5]'

ans =

   1.0000 - 6.0000i
   7.0000 + 3.0000i
   5.0000          

>> [1+6i 7-3i 5].'

ans =

   1.0000 + 6.0000i
   7.0000 - 3.0000i
   5.0000

在你的情况下,你没有复杂的数字,所以两个(有或没有点.)的结果将是相同的

答案 1 :(得分:4)

您知道可以输入help /help .之类的内容吗?您将获得所有MATLAB运算符和特殊字符的帮助。

为了获得transpose这样的帮助,首先要了解MATLAB语法。有点奇怪的是,撇号起着三重作用:

  • 表示字符串(引用)
  • 逃避自己
  • 用于转置矢量/矩阵

第二个允许你在字符串中写一个文字撇号:

>> a = 'This is how it''s done!';

这种三重角色是由于历史原因,而且在我看来相当不幸。因为,如果你试试

>> help .'

MATLAB语法规则规定这将被解释为

>> help('.'')

这是未终结字符串。因此,要获得转座的帮助,你必须“逃避”撇号:

>> help .''

这给了你答案:

...
transpose  - Transpose                         .'
ctranspose - Complex conjugate transpose        ' 
...

所以区别在于:

>> A = [1+1i  2+2i
        3+3i  4+4i];
>> A'
ans =
   1.0000 - 1.0000i   3.0000 - 3.0000i
   2.0000 - 2.0000i   4.0000 - 4.0000i

>> A.'
ans =
   1.0000 + 1.0000i   3.0000 + 3.0000i
   2.0000 + 2.0000i   4.0000 + 4.0000i

您可以从中获得一些乐趣:

>> A' * A.'

ans =
    14    30
    20    44

当然,您也可以获得help transposehelp ctranspose的帮助,因为撇号符号只是那些较长函数名称的别名。当你进入OOP和运算符重载时,那些长函数名也是使用的:

classdef MyAwesomeClass

    methods

        %// this is how you'd overload the transpose operator for your class:
        function obj = transpose(obj)
            %// implement transpose here
        end

    end

end