精华内容
下载资源
问答
  • 今天小编就为大家分享一篇python 二维矩阵三维矩阵示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 我看到的方法大致有三种,除了使用外部库(即,mtimesx):循环通过三维矩阵的切片重复和排列巫术Cellfun乘法我最近比较了这三种方法,看哪种方法最快。我的直觉是(2)会是赢家。代码如下:% generate dataA = 20;B = 30;C =...

    我正在处理完全相同的问题,并着眼于最有效的方法。我看到的方法大致有三种,除了使用外部库(即,

    mtimesx

    ):

    循环通过三维矩阵的切片

    重复和排列巫术

    Cellfun乘法

    我最近比较了这三种方法,看哪种方法最快。我的直觉是(2)会是赢家。代码如下:

    % generate data

    A = 20;

    B = 30;

    C = 40;

    D = 50;

    X = rand(A,B,C);

    Y = rand(B,D);

    % ------ Approach 1: Loop (via @Zaid)

    tic

    Z1 = zeros(A,D,C);

    for m = 1:C

    Z1(:,:,m) = X(:,:,m)*Y;

    end

    toc

    % ------ Approach 2: Reshape+Permute (via @Amro)

    tic

    Z2 = reshape(reshape(permute(X, [2 1 3]), [A B*C]), [B A*C])' * Y;

    Z2 = permute(reshape(Z2',[D A C]),[2 1 3]);

    toc

    % ------ Approach 3: cellfun (via @gnovice)

    tic

    Z3 = cellfun(@(x) x*Y,num2cell(X,[1 2]),'UniformOutput',false);

    Z3 = cat(3,Z3{:});

    toc

    所有三种方法产生相同的输出(phew!)但是,令人惊讶的是,这个循环是最快的:

    Elapsed time is 0.000418 seconds.

    Elapsed time is 0.000887 seconds.

    Elapsed time is 0.001841 seconds.

    请注意,从一个试验到另一个试验的时间变化很大,有时(2)是最慢的。随着数据的增加,这些差异变得更加显著。但与

    许多的

    更大的数据,(3)比(2)。循环方法仍然是最好的。

    % pretty big data...

    A = 200;

    B = 300;

    C = 400;

    D = 500;

    Elapsed time is 0.373831 seconds.

    Elapsed time is 0.638041 seconds.

    Elapsed time is 0.724581 seconds.

    % even bigger....

    A = 200;

    B = 200;

    C = 400;

    D = 5000;

    Elapsed time is 4.314076 seconds.

    Elapsed time is 11.553289 seconds.

    Elapsed time is 5.233725 seconds.

    但是循环法

    可以

    如果环尺寸比其他尺寸大得多,则应慢于(2)。

    A = 2;

    B = 3;

    C = 400000;

    D = 5;

    Elapsed time is 0.780933 seconds.

    Elapsed time is 0.073189 seconds.

    Elapsed time is 2.590697 seconds.

    所以(2)以一个大因素获胜,在这个(可能是极端的)情况下。可能并不是所有情况下都是最佳的方法,但是循环仍然很好,在许多情况下也是最佳的。在可读性方面也是最好的。走开!

    展开全文
  • A是一个三维矩阵,其中每一页的矩阵是4*2的,B是2*2的二维矩阵,直接[A,B]MATLAB运行显示串联维度不同
  • 求完整代码 输入三维矩阵输出二维矩阵 尽量有注释 谢谢谢谢谢谢谢谢
  • 二维矩阵 * 三维矩阵 * 二维矩阵 得到了一个二维矩阵。 即: (n * c1) x (m * c1 * c2) x (n * c2) 得 n * m 实现主要参考的是tensorflow的matmul运算对于高维矩阵的乘法支持batch的操作,只要保证高维矩阵最后两维...

    最近看论文时看到了一个让我费解的操作。
    二维矩阵 * 三维矩阵 * 二维矩阵 得到了一个二维矩阵。
    即:

    (n * c1) x (m * c1 * c2) x (n * c2) 得 n * m

    实现主要参考的是tensorflow的matmul运算对于高维矩阵的乘法支持batch的操作,只要保证高维矩阵最后两维之前的维度一样就可以。直接上例子比较直观。

    import tensorflow as tf
    g = tf.Graph()
    with g.as_default():
        x = tf.ones([2, 3, 1], dtype=tf.float32)
        y = tf.ones([2, 1, 4], dtype=tf.float32)
        z = tf.matmul(x, y)
    
    p <span class="token operator">=</span> tf<span class="token punctuation">.</span>ones<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">,</span> dtype<span class="token operator">=</span>tf<span class="token punctuation">.</span>float32<span class="token punctuation">)</span>
    q <span class="token operator">=</span> tf<span class="token punctuation">.</span>ones<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">,</span> dtype<span class="token operator">=</span>tf<span class="token punctuation">.</span>float32<span class="token punctuation">)</span>
    r <span class="token operator">=</span> tf<span class="token punctuation">.</span>matmul<span class="token punctuation">(</span>p<span class="token punctuation">,</span> q<span class="token punctuation">)</span>
    

    with tf.compat.v1.Session(graph=g) as sess:
    print(sess.run(z).shape) # (2, 3, 4)
    print(sess.run(r).shape) # (2, 3, 1, 6)

    比较让我震惊的是在tensorflow2.0版本可以按下面计算,当然这样计算比较符合理想化结果,例子中就是300个二维矩阵分别跟一个二维矩阵去乘。
    numpy和torch也是支持这样计算的,但是numpy的结果的维度有所不同。

    import tensorflow as tf
    g = tf.Graph()
    with g.as_default():
        a = tf.ones([2, 3], dtype=tf.float32)
        b = tf.ones([300, 3, 6], dtype=tf.float32)
        d = tf.matmul(a, b)  # (300,2,6),这一步2.0版本能够运行令人费解
    
    d <span class="token operator">=</span> tf<span class="token punctuation">.</span>transpose<span class="token punctuation">(</span>d<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span>  <span class="token comment"># d:(2,300,6)</span>
    c <span class="token operator">=</span> tf<span class="token punctuation">.</span>ones<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> dtype<span class="token operator">=</span>tf<span class="token punctuation">.</span>float32<span class="token punctuation">)</span>  <span class="token comment"># 原本c应该是(2,6)</span>
    
    e <span class="token operator">=</span> tf<span class="token punctuation">.</span>matmul<span class="token punctuation">(</span>d<span class="token punctuation">,</span> c<span class="token punctuation">)</span>  <span class="token comment"># e:(2,300,1)</span>
    e <span class="token operator">=</span> tf<span class="token punctuation">.</span>reshape<span class="token punctuation">(</span>e<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">300</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
    

    with tf.compat.v1.Session(graph=g) as sess:
    print(sess.run(e).shape)
    # print(sess.run(d).shape)

    tensorflow1.0版本不可以按上述计算,在第一个matmul的时候必须要将b reshape一下,具体计算可以参考:
    https://blog.csdn.net/weixin_41024483/article/details/88536662

    展开全文
  • Numpy二维矩阵三维矩阵的乘积

    万次阅读 2018-12-04 19:28:58
    np.dot(a, b)----两个二维矩阵满足第一个矩阵的列数与第二个矩阵的行数相同,那么可以进行矩阵的乘法,即矩阵积 np.matmul(a, b)—矩阵运算,矩阵积 matrix情况下 只有multiply是按元素相乘,其它都是矩阵运算。 当...

    乘法运算类型及其定义
    ndarry情况下:
    运算符号* — 逐元素相乘
    np.multiply(a,b)----逐元素相乘
    np.dot(a, b)----两个二维矩阵满足第一个矩阵的列数与第二个矩阵的行数相同,那么可以进行矩阵的乘法,即矩阵积
    np.matmul(a, b)—矩阵运算,矩阵积

    matrix情况下
    只有multiply是按元素相乘,其它都是矩阵运算。

    当为二维与三维乘积时:(3,3,2)*(3,3)
    矩阵相乘None表示按行切片
    arr3[:,:,None]表示arr3按行切片

    在这里插入图片描述

    展开全文
  • 一组系数构成的向量跟三维矩阵的每层对应相乘,用matlab实现如下: v = [1;2]; A = ones(2,2,2); vr = reshape(v,1,1,2); %将向量v变成一个第三个维度上的向量 B = vr .* A;

    一组系数构成的向量跟三维矩阵的二维层对应相乘,用matlab实现如下

    v = [1;2];
    A = ones(2,2,2);
    vr = reshape(v,1,1,2); %将向量v变成一个第三个维度上的向量
    B = vr .* A; %点乘
    

    在这里插入图片描述

    运行结果
    在这里插入图片描述
    有用点个赞 ୧(⁎˃ ◡˂⁎)୨ꔛ♩

    展开全文
  • Matlab仅支持稀疏矩阵(2D).对于3D张量/阵列,您必须使用变通方法.我能想到两个:>线性索引>细胞阵列线性索引您可以像这样创建稀疏向量:A = spalloc(500000*60*60, 1, 100);最后一个条目(100)指的是最终要分配...
  • goal:把(2, 3, 2)的matrix打平成(2, 3*2)的matrix import numpy as np x = np.arange(12).reshape((2, 3, 2)) Out[44]: array([[[ 0, 1], [ 2, 3], [ 4, 5]], [[ 6, 7], [ 8, 9], [10, 11]]]) ...
  • % 3变2(m,1,n)变成(m,n) a=ones(3,1,2) a(:,:,1)=[1,1,1] a(:,:,2)=[2,2,2]%a是(3,1,2) b=reshape(a,3,2)%把3行1列2页的矩阵,插到列中。形变函数不变转到列的增加。 %3变2(m,n,1)变成(m,n) a=...
  • MATLAB对一个二维矩阵三维

    万次阅读 2019-03-14 12:25:04
    1 准备好二维矩阵,比如我这有个3x16的矩阵叫SFW1 2 画三维图,一句代码就OK mesh(SFW1) 3 结果如下
  • python 二维矩阵三维矩阵

    万次阅读 2018-10-09 21:58:26
    &gt;&gt;&gt; import numpy as np &gt;&gt;&gt; a = np.arange(12).reshape(3,4) &gt;&gt;&gt; a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) ...clas...
  • 程序功能:从三维数组中提取出任意二维的数据,并保存在新的二维矩阵中,且能所以变换顺序。
  • 三维数组中提取出任意二维的数据,并保存在新的二维矩阵中,且能所以变换顺序。
  • 将一个5X20的二维矩阵变为一个5X10X2的三维数据。 import numpy as np X_test = np.arange(100).reshape(5,20) print(X_test) X_test = X_test.reshape([X_test.shape[0], 10, 2]) 得到的三维的X_test是5个二...
  • [M,N]=size(data); x=1:1:M; y=1:1:N; [X,Y]=meshgrid(x,y); mesh(X,Y,data); shading interp; data为想要3D显示的二维矩阵
  • matlab的三维矩阵含义

    万次阅读 2019-01-11 21:32:30
    a(:,:,2)=ones(2,3) 对于一个矩阵a先定义好第三维,即在哪一个页内,确定第三个维度后,前两个维度就跟二维矩阵一样,一个行数一个列数确定一个数值。 ...
  • 二维矩阵二维矩阵之间的卷积

    千次阅读 2020-04-25 04:02:24
    由于在数字信号处理(Digital Singal Processing, DSP)这门课中只学了一维矩阵之间的卷积运算。在查阅matlab 函数conv2代码与阅读有关卷积的博客,下面为个人总结部分: 假设我们的卷积核h为kernel矩阵(33): 待...
  • 解决方法 貌似Matlab只支持一维与二维二维三维矩阵乘法。把高维矩阵降维就能解决了,但是需要注意降维之后矩阵乘法是否结果一致。stackoverflow的回答 ...
  • Numpy 二维矩阵 乘以 三维矩阵 (Numpy, 2D matrix multiplies 3D matrix) Learn to apply the broadcast rule in Numpy. ======== goal: element-wise matrix multiplication arguments: A: 2×3×4 B: 2×4 C = A*B...
  • MATLAB 三维矩阵二维

    千次阅读 2011-03-22 14:47:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 目前有两个矩阵A(2,3)和B(2,3), 我们知道把两个矩阵进行左右拼接或者上下拼接的时候可以直接写 C=[A,B]或C=[A;B] 但是如果想前后拼接呢? C(2,3,2) 这时候就可以使用函数cat来连接两个矩阵. 比如 C=cat(3,A,B) 其中3...
  • matlab三维数组与二维矩阵相乘问题

    千次阅读 2019-03-22 14:28:00
    近来在搞一个改进近场music算法的仿真问题,用matlab进行二维搜索的时候写了很多for循环,导致运行速度...考虑到matlab语言本身的矩阵运算特点,改用三维数据解决二维搜索问题,下面记录过程中遇到的一点问题与解决方法
  • 二维旋转矩阵推导: 点沿轴逆时针旋转度后变为点: 有, 则旋转矩阵为 同理可得在三维坐标系(右手准则)下: 绕轴逆时针旋转角度旋转矩阵为: 绕轴逆时针旋转角度旋转矩阵为: 绕轴逆时针旋转角度...
  • 1、matlab二维转换为三维矩阵 这里用到reshape函数 格式为AA1=reshape(A1,[行,列,页]) 如下所示 A1=[2 2 2 2 2.5 2.5 2.5 2.5 1.8 1.8 1.8 1.8 2.2 2.2 2.2 2.2 2 2 2 2 1.8 1.8 1.8 1.8 2.1 2.1 2.1 2.1 2 2 2 2 ...
  • matlab中三维数组与二维矩阵的关系

    千次阅读 2018-04-20 14:45:44
    I=zeros(2,2,3);%创建一个两行两列的三维数组 a=I(:,:,2); 此时a是一个两行两列全零的二维矩阵,并不是三维数组
  • 用于matlab寻找三维图像或二维矩阵的波峰,详细使用方法可在 https://github.com/JamesHoi/Matlab/tree/master/IMMC/Findpeaks 查看。此资源免费下载,我的更多资源可在 ...
  • MATLAB中对一个二维矩阵三维

    万次阅读 2017-03-08 10:26:33
    现有一个400*400二维矩阵,画一个三维图,横坐标是矩阵元素的行号,纵坐标是矩阵元素的列号,三维图形显示的高度/值是矩阵上对应的元素值。 可实现程序如下: x =Plot_Talbe(400, 400); [X, Y] = meshgrid(1:400, 1...
  • 使用[gx,gy,gz]=gradient(a)语句,可调用MATLAB求梯度函数gradient对三维矩阵a求梯度,得到gx,gy,gz分别是沿三维矩阵x,y,z三个方向求得的梯度。 下面通过一个例子说明: 首先得到一个三维矩阵a: a a(:,:,1) = 1 2 5...
  • 按照向量order指定的顺序重排A的各。B中元素和A中元素完全相同。但由于经过重新排列,在A、B访问同一个元素使用的下标就不一样了。order中的元素必须各不相同。 对b=permute(a(:,1,:),[1 3 2]);进行解释:(:,1,:)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,897
精华内容 69,958
关键字:

三维矩阵变成二维矩阵