如何在matlab中将两个矢量分量数组合成一个矢量数组

时间:2016-12-02 17:20:19

标签: arrays matlab vector cell-array

我有两个大小相同的数组uxuy,我想将它们组合成一个向量的单元格数组,以便U(1,1)包含一个由{{1}组成的向量}和`numel(U)= numel(ux)= numel(uy)'

组件uy(1,1),ux(1,1)ux表示图像渐变的单位矢量。组件数组由元素乘法创建:

uy

我需要能够多次访问每个向量,并将它们称为ux = I1x./I1mag; uy = I1y./I1mag; dot的参数,并且使向量数组比创建ad hoc向量更快更方便对于调用它的每次迭代中的每一个。

由于

编辑以进一步明确:

假设我有一个数组

cross

和另一个大小相同的数组

uy = (1,2,3;4,5,6);

我需要yx向量,所以我们的例子是

([1,9],[2,8],[3,7]; [4,6],[5,5],[6,4])

请问最有效的方法是什么?我将获得每个像素与其邻居的点积,反之亦然,因此每个向量将使用16次,完整数组包含10 ^ 4或10 ^ 5个元素...

感谢您的继续帮助。

2 个答案:

答案 0 :(得分:1)

您可以创建两个图层。一层包含 ux ,另一层包含 uy

library(xml)
library(rentrez)
pubmed_parsed <- function(term, n=100){
    df <- data.frame(ATitle = character(), JTitle = character(), MeshTerms = character(), Abstract = character(), FAuthor = character(), LAuthor = character(), stringsAsFactors = FALSE)
  IdList <- entrez_search(db = "pubmed", term = term, retmode = "xml", retmax = n)
  for (i in 1:n){
    XmlFile <- entrez_fetch(db = "pubmed", id=IdList$ids[i], rettype = "xml", retmode = "xml", parsed=TRUE)
    Parsed <- xmlRoot(XmlFile)
    df$ATitle[i] <- xpathSApply(Parsed, "/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Title", xmlValue, simplify = FALSE)
    df$Abstract[i] <- xpathSApply(Parsed, "/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Title", xmlValue, simplify = FALSE)
  }
  df
}

结果将是:

ux = [10 8 7;6 5 4];
uy = [1 2 3;4 5 6];

xy(:,:,1) = ux; // [10 8 7;6 5 4]
xy(:,:,2) = uy; // [1 2 3;4 5 6]

aaa=xy(1,1,:); // [10 1]
bbb=xy(1,2,:); // [8 2]

dot(aaa,bbb)

答案 1 :(得分:1)

如果您真的希望它是一个单元格向量,其中每个元素都是[1 x 2]向量,请使用mat2cell

ux = rand(15,1);
uy = rand(15,1);
U = [ux, uy];
K = mat2cell(U,ones(size(U,1),1),2);

但正如其他人所指出的那样,U = [ux, uy]就足够了,因为你可以调用U(1,:)来获得完全相同的结果,而不必担心细胞。

如果您想要对两个向量上的dot产品进行计算,arrayfun(@dot,ux,uy)可以逐个完成该工作。