标签: vectorization

MATLAB:比较两个数组的所有元素

我在MATLAB两个矩阵让说arr1arr2尺寸1000*1000的每一个.我想比较它们的元素并将结果保存在resarr1000*1000 的结果矩阵中,以便每个元素:

  • 如果元素in arr1大于in arr2,则将值1放在结果中
  • 如果元素in arr2更大,则存储值2

但是我不想用for循环来做这个,因为那个更慢.我怎样才能做到这一点?


编辑: 另外,如果我想不同的RGB值存储在一个1000×1000×3矩阵的结果,取决于比较arr1arr2,可以在不慢的循环来实现?

例如,store(255,0,0)if arr1更大,(0,255,0)if arr2更大

comparison matlab matrix vectorization

2
推荐指数
1
解决办法
1万
查看次数

如何将矩阵的大小加倍并在Matlab中传播其元素?

假设我有一个这样的矩阵:

a = 
    1    2
    3    4
Run Code Online (Sandbox Code Playgroud)

我想将矩阵的大小加倍并创建如下内容:

aa = 
     1    1    2    2
     1    1    2    2
     3    3    4    4
     3    3    4    4
Run Code Online (Sandbox Code Playgroud)

以这种方式,第一矩阵中的每个元素传播到较大矩阵中的四个元素.

a(i,j) == aa(2*i-1, 2*j-1)
       == aa(2*i  , 2*j-1)
       == aa(2*i-1, 2*j)
       == aa(2*i  , 2*j)
Run Code Online (Sandbox Code Playgroud)

是否有任何预定义的功能来做到这一点?

我绝对可以通过两个循环来做到这一点,但我想要最简单,最干净的方式!

size matlab matrix vectorization

2
推荐指数
1
解决办法
1494
查看次数

MATLAB - 直接使用矩阵的索引而不使用循环

我看到了另一个问题,但他只在一个索引上运行.我需要在不使用for循环的情况下对列和行索引进行操作.有没有办法做到这一点:

设M(a,b)为矩阵,大小为括号中的一个.我想将每个元素操作为exp((mn)^ 2)

matlab matrix vectorization

2
推荐指数
1
解决办法
668
查看次数

从移位矢量matlab矢量化制作矩阵

Geetings,这是一个小问题.

我有一个矢量v(size(v)= T),一个正数P,P <T nad正数N,N <T.并且想要制作大小为PxN的矩阵M,这样:

M = [v(T),     v(T-1), ....., v(T-N+2),   v(T-N+1);
     v(T-1),   v(T-2), ....., v(T-N+1),   v(T-N)  ;
     v(T-2),   v(T-3), ....., v(T-N),     v(T-N-1);
        .        .       .       .           .    ;
        .        .       .       .           .    ;
     v(T-P+1), v(T-P), ....., v(T-P-N+3), v(T-P-N+2)]
Run Code Online (Sandbox Code Playgroud)

它认为T> P + N.

让我们举个例子.

v = [1, 2, 3, 4, 5]';
P = 3;
N = 3;
M = [5, 4, 3;
     4, 3, 2;
     3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

我知道如何使用for循环来做这个,但我也认为可以通过向量化来实现 - 这里的问题是 - 我在矢量化方面不是很熟练.

Thx提示等等:))

matlab vector matrix vectorization

2
推荐指数
1
解决办法
214
查看次数

以独特的方式MATLAB平铺矢量

考虑A = [ 200000 x 1]矢量.我有另一个矢量idx = [200000x1].我想平铺A这样ithA的每个元素都是平铺idx(i)时间.

例如:

A   idx output 
2   2    2
3   1    2
4   3    3 
5   1    4
.   .    4
.   .    4
.   .    5 
.    .     .
Run Code Online (Sandbox Code Playgroud)

任何非循环的想法?

matlab tiling vectorization run-length-encoding

2
推荐指数
1
解决办法
73
查看次数

从索引数组创建二进制矩阵

问题的定义

我有两个分别称为权重和索引的数组:

 weights = [1, 3, 2]; 
 indices = [1, 1, 2, 3, 2, 4]; 

 m = 4; % Number of Rows in Matrix
 n = 3; % Number of Columns in Matrix
 M = zeros(m, n);
Run Code Online (Sandbox Code Playgroud)

名为indices的数组存储索引,我需要在每列中存储1.

例如,对于在索引(1)中指示的第1行的第一列,我需要存储1,并且这由权重(1)表示,其等于1.

  M(indices(1), 1) = 1;
Run Code Online (Sandbox Code Playgroud)

对于第2列,在第1行到第3行(索引(2:4))我需要存储1.第2列的索引范围再次由权重(2)表示.

  M(indices(2:4),2) = 1;
Run Code Online (Sandbox Code Playgroud)

类似地,对于第3列,在列2和4(指数(5:6))我需要存储1指数对第3列的范围由权重再次(3)表示.

  M(indices(5:6),3) = 1; 
Run Code Online (Sandbox Code Playgroud)

预期的二进制矩阵

预期和结果二进制矩阵是:

 1 1 0
 0 1 1
 0 1 0
 0 0 1
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以通过使用权重和索引数组以广义的方式做到这一点,而不是以硬编码的方式来创建创建二进制矩阵M?

arrays matlab matrix vectorization indices

2
推荐指数
1
解决办法
115
查看次数

以向量化方式创建给定大小的NumPy矩阵

是否有内置的NumPy函数或任何矢量化方法生成值n大于1 的以下2D NumPy矩阵?让我为等于2、3和4 的所需矩阵给出一些示例n

一种方法是在下三角部分构造一个1的矩阵,然后简单地乘以一个向量np.arange(1, n+1)。还有其他选择吗?

import numpy as np
Run Code Online (Sandbox Code Playgroud)

对于n = 2

n = 2
arr = np.array([[1, 0], [2, 2]])

# array([[1, 0],
#        [2, 2]])
Run Code Online (Sandbox Code Playgroud)

对于n = 3

n = 3
arr = np.array([[1, 0, 0], [2, 2, 0], [3, 3, 3]])

# array([[1, 0, 0],
#        [2, 2, 0],
#        [3, 3, 3]])
Run Code Online (Sandbox Code Playgroud)

对于n = 4

n = 4
arr = np.array([[1, 0, 0, 0], [2, …
Run Code Online (Sandbox Code Playgroud)

python numpy vectorization

2
推荐指数
1
解决办法
120
查看次数

在R中生成数字序列的快速方法

它可能看起来像一个有趣的问题,但是R生成如下所示的2行矩阵的最快方法是:

cc = NULL
n1 = 1000
n2 = 1000000
  for (i in 0:n1)
    for (j in 0:n2)
      cc = c(cc, i, j)
  cbn = matrix(cc, nrow = 2)
Run Code Online (Sandbox Code Playgroud)

optimization loops r vectorization

2
推荐指数
1
解决办法
61
查看次数

用一组开始和结束索引对数组进行索引

我有两个数组:

timesteps = [1,3;5,7;9,10];
data = [1,2,3,4,5,6,7,8,9,10];
Run Code Online (Sandbox Code Playgroud)

timesteps数组中的值描述了data我想要的值。第一列开始,第二列结束。

例如我在这里想得到[1,2,3,5,6,7,9,10]

所以这段代码对我来说很好用,但是由于for循环的缘故,它非常慢... Matlab中是否有一个内衬,所以我可以摆脱for循环?

newData=[];
for ind=1:size(timesteps,1)
  newData=cat(2,newData,data(timesteps(ind,1):timesteps(ind,2)));
end
Run Code Online (Sandbox Code Playgroud)



编辑:通过Wolfie的解决方案,我得到了以下(非常好的)结果。(我只使用了一个小数据集,通常是大数据集的50倍。)

(Mine)    Elapsed time is 48.579997 seconds.
(Wolfies) Elapsed time is 0.058733 seconds.
Run Code Online (Sandbox Code Playgroud)

indexing optimization matlab for-loop vectorization

2
推荐指数
1
解决办法
71
查看次数

如何检查向量是否为斐波那契数列

背景:斐波那契数字是一系列数字,其中每个数字(斐波那契数字)是前面两个数字的总和。一个简单的例子是:1、1、2、3、5、8等。

我试图了解如何检测矢量是否包含斐波那契数。是否可以通过向量化操作来完成此操作(我的意思是不使用循环)?

performance r vectorization

2
推荐指数
1
解决办法
66
查看次数