C n维超立方体距离矩阵的生成

C n维超立方体距离矩阵的生成,c,matlab,multidimensional-array,C,Matlab,Multidimensional Array,对于任意维的超立方体,是否有生成邻接矩阵的算法或方法?假设你的输入是5,它将创建一个5维的超立方体 我所能找到的都是来自 及 如果要生成N-D单位超立方体的顶点,基本上可以创建一个N值truthtable。下面是一些我使用的代码: function output = ttable(values) output = feval(@(y)feval(@(x)mod(ceil(repmat((1:x(1))', 1, numel(x) - 1) ./ repmat(x(2:end), x(1)

对于任意维的超立方体,是否有生成邻接矩阵的算法或方法?假设你的输入是5,它将创建一个5维的超立方体

我所能找到的都是来自


如果要生成N-D单位超立方体的顶点,基本上可以创建一个N值truthtable。下面是一些我使用的代码:

function output = ttable(values)

  output = feval(@(y)feval(@(x)mod(ceil(repmat((1:x(1))', 1, numel(x) - 1) ./ repmat(x(2:end), x(1), 1)) - 1, repmat(fliplr(y), x(1), 1)) + 1, fliplr([1 cumprod(y)])), fliplr(values));
end
要得到一个5-D超立方体的顶点,你可以这样称呼它:

vertices = ttable(ones(1, 5) * 2) - 1;
从这里,您可以通过查找仅相差一位的所有顶点来计算邻接矩阵,即:

adj_list = zeros(2^5, 5);
adj_mat = zeros(2^5, 2^5);
for v=1:2^5
  L1_dists = sum(abs(vertices - repmat(vertices(v, :), 2^5, 1)), 2);
  adj_list(v, :) = find(L1_dists == 1);
  adj_mat(v, find(L1_dists == 1)) = 1;
end

如果要生成N-D单位超立方体的顶点,基本上可以生成一个N值truthtable。下面是一些我使用的代码:

function output = ttable(values)

  output = feval(@(y)feval(@(x)mod(ceil(repmat((1:x(1))', 1, numel(x) - 1) ./ repmat(x(2:end), x(1), 1)) - 1, repmat(fliplr(y), x(1), 1)) + 1, fliplr([1 cumprod(y)])), fliplr(values));
end
要得到一个5-D超立方体的顶点,你可以这样称呼它:

vertices = ttable(ones(1, 5) * 2) - 1;
从这里,您可以通过查找仅相差一位的所有顶点来计算邻接矩阵,即:

adj_list = zeros(2^5, 5);
adj_mat = zeros(2^5, 2^5);
for v=1:2^5
  L1_dists = sum(abs(vertices - repmat(vertices(v, :), 2^5, 1)), 2);
  adj_list(v, :) = find(L1_dists == 1);
  adj_mat(v, find(L1_dists == 1)) = 1;
end

“生成5维超立方体”是什么意思?需要生成什么数据?我必须设置n维超立方体,然后取它的邻接矩阵(一旦设置好就不难了),然后对邻接矩阵进行特征值和线性代数分析。然后你一定要编辑你的问题,说你要的是邻接矩阵。而且,C和Matlab是非常不同的语言;你对哪一个感兴趣?你在编辑xD上击败了我,谢谢,是的,我可以相当认真地使用c或matlab,所以这就是为什么我把“生成5维超立方体”的意思放在这里?需要生成什么数据?我必须设置n维超立方体,然后取它的邻接矩阵(一旦设置好就不难了),然后对邻接矩阵进行特征值和线性代数分析。然后你一定要编辑你的问题,说你要的是邻接矩阵。而且,C和Matlab是非常不同的语言;你对哪一个感兴趣?你比我先编辑xD谢谢,是的,我可以很好地使用c或matlab,所以这就是为什么我把它放在这里这很好,谢谢你甚至更进一步我得到了所有的0?我将试图找出为什么1_dists=sum(顶点-repmat(顶点(v,:),2^5,1),2);这一行给了我一个错误,上面这一行应该是
L1_dists=sum(adj_mat-repmat(顶点(v,:),2^5,1),2)?我很确定其余的都是正确的-它适合我。您是否复制了
ttable
函数并运行了
vertices=ttable(一个(1,5)*2)-1
?这非常好,感谢您更进一步我得到了所有的0?我将试图找出为什么1_dists=sum(顶点-repmat(顶点(v,:),2^5,1),2);这一行给了我一个错误,上面这一行应该是
L1_dists=sum(adj_mat-repmat(顶点(v,:),2^5,1),2)?我很确定其余的都是正确的-它适合我。您是否复制了
ttable
函数并运行了
顶点=ttable(一个(1,5)*2)-1