精华内容
下载资源
问答
  • 提取子矩阵
    千次阅读
    2021-04-20 15:27:12

    Matlab矩阵元素与子矩阵的提取

    >> %矩阵元素的提取

    >> A=[1 2 3;4 5 6;7 8 9;10 11 12]

    A =

    1 2 3

    4 5 6

    7 8 9

    10 11 12

    >> A(3,1)%提取A矩阵第3行,第1列的元素

    ans =

    7

    >>

    >> %通过元素序号提取元素(矩阵元素序号与它的存储顺序是一一对应的!)

    >> A(6)

    ans =

    5

    >> %Matlab中矩阵元素按列存储,首先是第1列,其次是第2列......

    >>

    >> %使用函数find(c)查找符合条件的矩阵元素的行和列

    >> %函数find(c)的使用格式[row,col]=find(c),c一般为逻辑表达式;row返回满足条件的元素的行号,col返回满足条件的元素的列号。

    >> a=[12 34 26 17 21;61 50 89 12 8;25 62 91 23 47]%查找a矩阵中大于等于20、小于等于60的元素。

    a =

    12 34 26 17 21

    61 50 89 12 8

    25 62 91 23 47

    >> [r,c]=find(a>=20&a<=60);

    >> b=find(a>=20&a<=60);

    >> disp('符合条件的矩阵元素的行号和列号:'),[r,c]

    符合条件的矩阵元素的行号和列号:

    更多相关内容
  • Numpy提取子矩阵

    千次阅读 2018-12-28 14:34:36
    想要从numpy的矩阵或者ndarray中提取子矩阵还是使用np.ix_函数最快。另外想不到ndarray速度比matrix要快一下。水平有限,多多斧正。 import numpy as np # ndarray mtx = np.random.random((300, 300)) a = [1...

    结论

    代码运行环境:ipython、jupyter、jupyterlab
    想要从numpy的矩阵或者ndarray中提取子矩阵还是使用有序的坐标序列np.ix_函数最快。另外想不到ndarray速度比matrix要快一些, 实验不是很严谨,实验次数不够, 水平有限,多多斧正。

    import numpy as np
    import time
    import random
    
    # ndarray
    mtx = np.random.random((3000, 1500))
    # 矩阵
    M = np.matrixlib.matrix(mtx)
    
    print(u"有序坐标")
    a_lis = random.sample(range(3000), 400)
    order_a = sorted(a_lis)
    b_lis = random.sample(range(1500), 200)
    order_b = sorted(b_lis)
    
    indices = np.ix_(order_a, order_b)
    
    time.sleep(2)
    %timeit c = mtx[indices]
    time.sleep(2)
    %timeit c = M[indices]
    time.sleep(2)
    %timeit c = mtx[:, order_b][order_a, :]
    time.sleep(2)
    %timeit c = mtx[order_a, :][:, order_b]
    time.sleep(2)
    
    print(u"无序坐标")
    unordered_a = a_lis
    unordered_b = b_lis
    indices = np.ix_(unordered_a, unordered_b)
    
    time.sleep(2)
    %timeit c = mtx[indices]
    time.sleep(2)
    %timeit c = M[indices]
    time.sleep(2)
    %timeit c = mtx[:, unordered_b][unordered_a, :]
    time.sleep(2)
    %timeit c = mtx[unordered_a, :][:, unordered_b]
    
    有序坐标
    The slowest run took 6.45 times longer than the fastest. This could mean that an intermediate result is being cached.
    1000 loops, best of 3: 559 µs per loop
    The slowest run took 493.40 times longer than the fastest. This could mean that an intermediate result is being cached.
    10 loops, best of 3: 749 µs per loop
    10 loops, best of 3: 12.6 ms per loop
    1000 loops, best of 3: 1.07 ms per loop
    无序坐标
    1000 loops, best of 3: 757 µs per loop
    The slowest run took 6.65 times longer than the fastest. This could mean that an intermediate result is being cached.
    1000 loops, best of 3: 1.32 ms per loop
    100 loops, best of 3: 13.9 ms per loop
    100 loops, best of 3: 1.35 ms per loop
    
    展开全文
  • R语言中, 矩阵可以设置行名和列名, 然后根据行名和列名进行提取. R语言代码: R_test = matrix(1:16,4,4) colnames(R_test) = rownames(R_test) = c("A","B","C","D") R_...

    R语言中, 矩阵可以设置行名和列名, 然后根据行名和列名进行提取.

    R语言代码:

    R_test = matrix(1:16,4,4)
    colnames(R_test) = rownames(R_test) = c("A","B","C","D")
    R_test
    
    id2 = c("B","C")
    R_test[id2,id2]
    

    结果如下:

    > R_test = matrix(1:16,4,4)
    > colnames(R_test) = rownames(R_test) = c("A","B","C","D")
    > R_test
      A B  C  D
    A 1 5  9 13
    B 2 6 10 14
    C 3 7 11 15
    D 4 8 12 16
    > 
    > id2 = c("B","C")
    > R_test[id2,id2]
      B  C
    B 6 10
    C 7 11
    

    在Julia中解决方法如下:

    思路如下:

    • 1, 原始的行名和列名ID1
    • 2, 需要提取的行名和列名ID2
    • 3, 因为Array都是从1开始的数字编号, 所以构建一个Dict, 将ID1作为keys, 将数字编号作为values
    • 4, 将ID2作为keys, 提取对应的数字编号values, 命名为re
    • 5, 使用ID2对应的re提取矩阵的子矩阵.
    • 代码如下:
    julia_test = reshape(collect(1:16),4,4)
    id1 =["a","b","c","d"]
    j =1
    tt = Dict()
    for i in id1
        get!(tt,i,j)
        j = j+1
    end
    tt
    id2 = ["b","c"]
    re =[]
    for i in id2
        push!(re,tt[i])
    end
    re
    julia_test[re,re]
    

    结果如下:

    Main> julia_test = reshape(collect(1:16),4,4)
    4×4 Array{Int64,2}:
     1  5   9  13
     2  6  10  14
     3  7  11  15
     4  8  12  16
    
    Main> id1 =["a","b","c","d"]
    4-element Array{String,1}:
     "a"
     "b"
     "c"
     "d"
    
    Main> j =1
    1
    
    Main> tt = Dict()
    Dict{Any,Any} with 0 entries
    
    Main> for i in id1
               get!(tt,i,j)
               j = j+1
           end
    
    Main> tt
    Dict{Any,Any} with 4 entries:
      "c" => 3
      "b" => 2
      "a" => 1
      "d" => 4
    
    Main> id2 = ["b","c"]
    2-element Array{String,1}:
     "b"
     "c"
    
    Main> re =[]
    0-element Array{Any,1}
    
    Main> for i in id2
               push!(re,tt[i])
           end
    
    Main> re
    2-element Array{Any,1}:
     2
     3
    
    Main> julia_test[re,re]
    2×2 Array{Int64,2}:
     6  10
     7  11
    
    

    问题解决.

    参考:

    1. http://discourse.juliacn.com/t/topic/811?u=yijiaobani
    展开全文
  • 我现在做的是目标检测,中间用到子矩阵提取,就是图像是200*300的矩阵,分为10*10个子矩阵,s(1,1)代表1~20行,1~30列的子矩阵,s(2,2)代表21~40行,31~60列的子矩阵,以此类推。然后用otsu算法(即graythresh函数)将...

    本人刚开始编程,matlab是新手,编程也是白痴,在此求教,谢过!

    我现在做的是目标检测,中间用到子矩阵提取,就是图像是200*300的矩阵,分为10*10个子矩阵,s(1,1)代表1~20行,1~30列的子矩阵,s(2,2)代表21~40行,31~60列的子矩阵,以此类推。然后用otsu算法(即graythresh函数)将每个子矩阵求阈值,保存在t矩阵中,t(1,1)表示s(1,1)的阈值(t(1,1)为一个数,s(1,1)为一个矩阵;t为10*10,s为20*30)

    最后t的阶数总不对,解决不了啊!请大家帮忙!谢了!

    程序如下:

    f=imread('car_2.bmp');                       % 读取图像;

    [x,y]=size(f);                                        % x,y为图像的行数和列数;

    m=20;n=30;                                        % 手动定义子图像的行数和列数;

    s=zeros(m,n);                                     % s表示子矩阵;

    t=zeros(10,10);                                  % t为阈值矩阵;

    rx=1:m:x;

    cy=1:n:y;                                               % rx和cy是子图像左上角的坐标;

    rowhigh=rx+m-1;                                   % rowhigh和colhigh是子图像历遍的终点,即为右下角的坐标;

    colhigh=cy+n-1;

    xcount=0;                                          % 设置x方向的计数器;

    for r=rx:rowhigh;                                 % rx,cy为子图像左上角的坐标;

    xcount=xcount+1;

    ycount=0;

    for c=cy:colhigh;

    ycount=ycount+1;

    s(xcount,ycount)=f(r,c);

    t(xcount,ycount)=graythresh(s(xcount,ycount));                % 用Otsu算法求每幅子图像的最佳阈值,保存在阈值矩阵t中;

    end

    end

    I=imresize(t,[x,y]);                              % 插值后的阈值矩阵I与原图像的行数和列数相等;

    H=f>I;                                                 % 将阈值矩阵与图像矩阵比较,将亮的部分提取出来;

    g=H*255;

    figure(1);

    imshow(f);title('原始图像')                        % 显示原图像;

    figure(2);

    imshow(g);title('处理结果')                        % 显示处理后的结果;

    最后再说一遍,我是菜鸟,大家不要笑话我。谢了!

    [本帖最后由 mooni 于 2009-4-7 16:43 编辑]

    展开全文
  • matlab矩阵提取,利用矩阵B信息从矩阵A里提取子矩阵 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表...
  • OpenCV中的提取子矩阵的函数

    千次阅读 2013-08-02 22:16:13
    常常用到的一类操作是要提取一个图像或矩阵中的一部分,比如一行、一列、对角线、一个矩形区域等等。 1.【提取单行/列】 使用Mat::row(n)和Mat::col(n)可以直接返回第n行或第n列的矩阵头,这个是O(1)的操作,不会...
  • 提取子矩阵 子矩阵是指由矩阵中的一部分元素构成的矩阵。 格式 提取对象 A(i,:) 第i行元素 A(:,j) 第j列元素 A(a:a+m,b:b+n) 在第a~a+m行,b~b+n列的元素 A(a:a+m,:) 第a行~a+m行的元素 A(c1:c2:c3) 序号在冒号...
  • 有一个较大的n行16列的矩阵A,现有一个1行m列的矩阵B,用矩阵b的元素代表矩阵A的行数,去提取矩阵A的子矩阵,如何实现?
  • I have a square matrix that is NxN (N is usually >500). It is constructed using a numpy array.I need to extract a new matrix that has the i-th column and row removed from this matrix....
  • 情况一: ...直接把ones(a,b)作为索引传入另一个矩阵。...可以看到,输出矩阵的尺寸和ones矩阵保持一致,ones矩阵前面的系数作为a矩阵的索引,要注意的是这个索引是列优先的,也就是竖着来的。...
  • 此代码提取子矩阵〜= 0 并创建新的矩阵组合子。 dataMat = 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 3 3 3 0 0 0 1 1 1 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 2 2 2 0 0 0 0 0 0 0 ...
  • 本文借鉴高手文章,借鉴网址如下:https://blog.csdn.net/qq_29212901/article/details/108781457
  • Matlab 取子矩阵

    千次阅读 2019-09-28 05:00:49
    MATLAB如何提取矩阵的子块 在matlab中如何提取一个矩阵的部分元素  1.提取大矩阵的一列、一行元素:  一列元素: A(:,j)表示提取A矩阵的第j列全部元素  一行元素: A(i,:)表示提取A矩阵的第i行元素,  于是...
  • [P Q nMatrices]) s(:,:,1) = 1 2 3 5 6 7 9 10 11 s(:,:,2) = 5 6 7 9 10 11 13 14 15 s(:,:,3) = 2 3 4 6 7 8 10 11 12 s(:,:,4) = 6 7 8 10 11 12 14 15 16 带有’sliding’选项的im2col查找所有重叠的子矩阵,并...
  • Eigen子矩阵操作

    2019-01-25 17:48:12
    Eigen子矩阵操作 ...子矩阵操作又称块操作,在矩阵运算中,子矩阵提取和操作应用也十分广泛。因此Eigen中也提供了相关操作的方法。提取子矩阵在操作过程中既可以用作左值也可以用作右值。 ...
  • numpy矩阵取出子矩阵踩到的坑
  • numpy选取矩阵数据的子矩阵

    千次阅读 2020-12-23 16:46:10
    如同在excel里面选择一块区域一样,我现在需要从numpy的一个大型的数据矩阵中选取其中的一小块。我们只需要知道带选取的矩阵的各个角点坐标,然后转换成slice的格式(也就是start:end的形式,注意start是等于,end是...
  • 【Matlab】矩阵中选取任意子矩阵

    千次阅读 2020-08-10 13:52:48
    两种方法实现在Matlab里提取任意子矩阵
  • 从矩阵中取出子矩阵

    千次阅读 2018-04-17 12:00:14
    以上是一个5X5的矩阵形状,我们如果要在这里面取一个子矩阵,要求就是必须子矩阵的宽高都是小于等于父矩阵,在这里就是小于等于5。 假设我们要在这个矩阵里面取出一个子矩阵,所需要的条件是: 父矩阵数据,父...
  • 剑指 Offer II 013. 二维子矩阵的和
  • Python从矩阵中选取子矩阵

    万次阅读 2019-03-26 16:53:34
    任意给出一个矩阵 a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) b = a[-2:,1:3]//[行开始:行结束,列开始:列结束] //最后一行(列)为倒数-1。所以-2 表示倒数第二行,省缺为到行结束;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,085
精华内容 834
关键字:

提取子矩阵