我需要通过以下方式将2X2矩阵转换为4X4矩阵的一些帮助:

A = [2 6;

8 4]

应该变成:

B = [2 2 6 6;

2 2 6 6;

8 8 4 4;

8 8 4 4]

我该怎么做?

在较新版本的MATLAB(R2015a和更高版本)中,最简单的方法是使用repelem函数:

B = repelem(A, 2, 2);

对于较旧的版本,可以使用功能kron和ones来替代其他(很大程度上)基于索引的解决方案:

>> A = [2 6; 8 4];

>> B = kron(A, ones(2))

B =

2     2     6     6

2     2     6     6

8     8     4     4

8     8     4     4

较短,尽管要推广到大型矩阵,但存在不必要的乘法运算,可能会使运算变慢。

@Jason S:是的,但是对于更大的矩阵,您还必须做更多的工作来生成此处其他解决方案所需的索引。

比Jason的解决方案更容易完成:

B = A([1 1 2 2], :);  % replicate the rows

B = B(:, [1 1 2 2]);  % replicate the columns

单线:A = [2 6; 8 4]; B = A([1 1 2 2],[1 1 2 2]);

这是另一种解决方案:

A = [2 6; 8 4];

B = A( ceil( 0.5:0.5:end ), ceil( 0.5:0.5:end ) );

它使用索引来完成所有操作,并且不依赖于A的大小或形状。

太奇怪了!" end"关键字以某种方式知道矩阵A,即使它是ceil()的参数。我不知道这是如何工作的,但确实如此。

我也不知道它是怎么做的,但是很方便!

疯狂,丑陋和最漂亮的解决方案

这有效:

A = [2 6; 8 4];

[X,Y] = meshgrid(1:2);

[XI,YI] = meshgrid(0.5:0.5:2);

B = interp2(X,Y,A,XI,YI,'nearest');

这只是A(x,y)从x,y∈{1,2}到x,y∈{0.5,1,1.5,2}的二维最近邻插值。

编辑:跳出Jason S和Martijn的解决方案,我认为这可能是最短,最清晰的解决方案:

A = [2 6; 8 4];

B = A([1 1 2 2], [1 1 2 2]);

它将适用于任何通用2X2矩阵还是仅特定于此2X2矩阵。

这是一种基于简单索引的方法,适用于任意矩阵。我们希望将每个元素扩展为一个MxN子矩阵:

A(repmat(1:end,[M 1]),repmat(1:end,[N 1]))

例:

>> A=reshape(1:6,[2,3])

A =

1     3     5

2     4     6

>> A(repmat(1:end,[3 1]),repmat(1:end,[4 1]))

ans =

1     1     1     1     3     3     3     3     5     5     5     5

1     1     1     1     3     3     3     3     5     5     5     5

1     1     1     1     3     3     3     3     5     5     5     5

2     2     2     2     4     4     4     4     6     6     6     6

2     2     2     2     4     4     4     4     6     6     6     6

2     2     2     2     4     4     4     4     6     6     6     6

为了了解该方法的工作原理,让我们仔细看一下索引。我们从连续数字的简单行向量开始

>> m=3; 1:m

ans =

1     2     3

接下来,我们将其扩展到矩阵,方法是在第一维重复M次

>> M=4; I=repmat(1:m,[M 1])

I =

1     2     3

1     2     3

1     2     3

1     2     3

如果我们使用矩阵索引数组,则矩阵元素将按标准Matlab顺序连续使用:

>> I(:)

ans =

1

1

1

1

2

2

2

2

3

3

3

3

最后,在索引数组时,关键字'end'的计算结果为对应维度中数组的大小。结果,在示例中,以下内容是等效的:

>> A(repmat(1:end,[3 1]),repmat(1:end,[4 1]))

>> A(repmat(1:2,[3 1]),repmat(1:3,[4 1]))

>> A(repmat([1 2],[3 1]),repmat([1 2 3],[4 1]))

>> A([1 2;1 2;1 2],[1 2 3;1 2 3;1 2 3;1 2 3])

>> A([1 1 1 2 2 2],[1 1 1 1 2 2 2 2 3 3 3 3])

A = [2 6; 8 4];

% arbitrary 2x2 input matrix

B = repmat(A,2,2);

% replicates rows & columns but not in the way you want

B = B([1 3 2 4], :);

% swaps rows 2 and 3

B = B(:, [1 3 2 4]);

% swaps columns 2 and 3, and you're done!

真好!我以为应该使用repmat以及列和行交换来执行此操作,但是我的大脑仍处于半睡眠状态。

gnovice使用Kroneker KRON函数的解决方案更好-更直接明了-"有意编程"

我喜欢Martijns回答得更好,但仅我一个人。

对于所有基于索引的解决方案,我实际上更喜欢Edrics(这是las3rjocks编辑的一般形式)。

有问题的数学运算在en.wikipedia.org/wiki/Kronecker_product中称为" Kronecker产品"。 gnovice的解决方案直接做到了这一点。无论如何,其他解决方案都是绕道而行的。

Kronecker乘积更通用,并且允许乘法。 OP希望复制矩阵元素以形成块矩阵。 KRON功能文档恕我直言令人困惑,为此目的,其用法尚不清楚。但是我们可以同意不同意。

有一个Reshape()函数可让您执行此操作...

例如:

reshape(array, [64, 16])

您可以在这里找到很棒的视频教程

干杯

重整对此不起作用-它要求输入和输出矩阵具有相同数量的元素。

感谢您的快速回答,但我认为为了重塑元素的数量一定不能改变。在这里我有一个2X2矩阵,即4个元素,我想制作一个4X4矩阵,所以16个element.no元素是不同的。扫管to吗?

您是否希望进行重塑过程以在新创建的空间中添加相关的元素数据?

matlab44矩阵,如何在MATLAB中将2X2矩阵转换为4X4矩阵?相关推荐

  1. matlab读取txt到矩阵,如何在MATLAB中将文本文件中的数据读入矩阵(How to read data from a text file into a matrix in MATLAB)...

    如何在MATLAB中将文本文件中的数据读入矩阵(How to read data from a text file into a matrix in MATLAB) 我在将.txt文件读入单个矩阵时遇 ...

  2. 如何在Java中将字节数组转换为InputStream和OutputStream

    您是否坚持使用编码,因为您有字节数组,并且链中的下一个方法需要InputStream? 不用担心Java有解决方案,您可以使用 ByteArrayInputStream 在Java中将字节数组转换为I ...

  3. android 4.4 flac,如何在Android中将音频原始转换为FLAC

    我使用audioRecord类录制音频.现在我想将音频原始文件转换为* flac格式.我转换*原始文件为WAV下一方式:如何在Android中将音频原始转换为FLAC private void cop ...

  4. 如何在Java中将GIF图像转换为PNG等图像格式?试试Aspose

    通常,GIF图像用于描述动画.动画GIF是按特定顺序组合在一起的帧的集合.但是,在某些情况下,必须将GIF图像转换为其他光栅图像格式.对于这种情况,本文演示了如何使用Java将GIF图像转换为PNG, ...

  5. matlab 图片转化为avi,在matlab中将tiff图像转换为avi

    我正在尝试使用VideoWriter将大量的tiff图像转换为avi视频.我在使用for循环将图像转换为视频时遇到了麻烦.这里是我到目前为止的代码:在matlab中将tiff图像转换为avi func ...

  6. 对象数组转成字符串数组 java_如何在Java中将对象数组转换为字符串数组

    如何在Java中将对象数组转换为字符串数组 我使用以下代码将Object数组转换为String数组: Object Object_Array[]=new Object[100]; // ... get ...

  7. matlab 创建 符号矩阵,如何在MATLAB中动态创建符号矩阵?

    我需要在MATLAB中创建一个符号矩阵.它可以静态地完成为如何在MATLAB中动态创建符号矩阵? syms a11 a12 a21 a22; A = [a11 a12; a21 a22]; 或使用紧凑 ...

  8. json字符串导入oracle,如何在Oracle中将JSON字符串转换为JSON

    我需要在Oracle查询中将JSON字符串转换为JSON. 示例字符串: {"1":{"qid":1,"aid":1,"a&quo ...

  9. 如何在 Python 中将 Excel 文件转换为图像?Aspose快速搞定

    在各种情况下,需要将 Excel 电子表格嵌入到 Web 或桌面应用程序中.在这种情况下的解决方案之一是将 Excel 工作表转换为图像格式.在本文中,将学习如何在 Python中将Excel XLS ...

最新文章

  1. OpenCV+python:色彩空间转换及色彩通道的分离和合并
  2. 【SSM框架系列】SpringMVC的文件上传、拦截器及异常处理
  3. codefroce385E矩阵快速幂
  4. kali linux fuzz工具集简述
  5. linux pmap was java,jvm 《九》pmap linux 命令介绍 及使用
  6. 耳机不分主从是什么意思_无延时音质好的蓝牙耳机能代替有线耳机吗—DOSS T60上手体验...
  7. 虚拟机搭建DHCP服务器
  8. SQL计算宝宝吃奶的时间间隔(二)
  9. 命令行怎么关闭自动修复此计算机,cmd重启命令(win10怎么跳过自动修复)
  10. 矩阵快速幂的学习(系统的学习)
  11. 从现实抽象出类的步骤
  12. 聚宽 get_price 多个股票数据_上证指数(000001)股票历史数据,下载上证指数(000001历史数据_股票股市历史数据下载股票数据网...
  13. HDFS原理 | NameNode和DataNode工作原理(图形化通俗易懂)
  14. 召唤神龙Ladon强化Cobalt Strike
  15. 一文读懂复权—不复权、前复权、后复权
  16. 计算机网络不可用感叹号,win7网络连接感叹号提示默认网关不可用怎么办
  17. AddressBook获取通讯录
  18. DT算法(暗像元法)在C6.1中的改进:Aerosol Dark Target (10km 3km) Collection 6.1 Changes
  19. 《机器学习基石》学习笔记 1 The Learning Problem
  20. 申请美国大学计算机专业,低GPA如何申请美国大学计算机专业

热门文章

  1. 兀键和6键怎么判断_如何判断分子或离子中的大π键
  2. 初出茅庐-----微信好友分析与微信机器人
  3. 使用百度地图api 报错 A parser-blocking, cross site
  4. 徐磊语法 6 7 时态的正确定义
  5. c语言程序题在哪儿搜,国家二级计算机考试c语言题库
  6. java鼠标监控的灵敏度_【JAVA求助】 鼠标监控 addMouseListener 报错
  7. 一颗种子,一颗小树苗 在快速生长长大的过程中,遇到风雨在所难免
  8. mongodb集群-副本集(CSRS)
  9. windows无法打开“应用商店”
  10. JS高级程序设计精简版(第五章:引用类型)附思维导图