gpt4 book ai didi

matlab - 用常量列向量替换矩阵中的特定列

转载 作者:行者123 更新时间:2023-12-05 08:23:57 24 4
gpt4 key购买 nike

对于神经网络,我想在矩阵中表示一个列向量 y = [1;2;3]:

y = [1 0 0;
0 1 0;
0 0 1]

我的向量 y 非常大,因此硬编码不是一种选择。另外,我想避免使用 for 循环。

到目前为止我做了什么:

y1 =[y; zeros(1,length(y)) ;zeros(1,length(y))] % add two rows with zeros in orde to give y the right format

idx = find(y1(1,:) == 2); % find all the columns containing a 2
y1(:,idx(1):idx(end)) = y1(:,[0;1;0]); % this does not work because now I am comparing a matrix with a vector

我也试过这个:

y1( y1 == [2;0;0] )=[0;1;0]; % This of course does not work 

有没有办法指定我要比较 y1 == [2;0;0] 中的列,或者有其他方法可以解决这个问题?

最佳答案

根据您问题的上下文,您希望找到一个矩阵,其中每一列都是一个标识向量。对于恒等向量,此矩阵中的每一列都是非零向量,其中 1 设置在由 y 的每个位置表示的向量位置,否则为 0。因此,假设我们有以下示例:

y = [1 5 4 3]

您会将 y_out 作为最终矩阵,即:

y_out =

1 0 0 0
0 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0

有几种方法可以做到这一点。最简单的方法是用 eye 声明单位矩阵,然后让 y 从这个矩阵中挑选出您想要的那些列,并将它们作为列放入您的最终矩阵中。如果 y 具有所有唯一值,那么我们将根据 y 简单地重新排列此单位矩阵的列。因此:

y_out = eye(max(y));
y_out = y_out(:,y)

y_out =

1 0 0 0
0 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0

另一种方法是声明一个 sparse矩阵,其中每个行索引只是 y 中的那些元素,每个列索引从 1 增加到与我们拥有的元素一样多 y:

y_out = sparse(y, 1:numel(y), 1, max(y), numel(y));
y_out = full(y_out)

y_out =

1 0 0 0
0 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0

另一种方法是使用 sub2ind在矩阵中找到线性索引,然后访问这些元素并将它们设置为 1。因此:

ind = sub2ind([max(y) numel(y)], y, 1:numel(y));
y_out = zeros(max(y), numel(y));
y_out(ind) = 1

y_out =

1 0 0 0
0 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0

关于matlab - 用常量列向量替换矩阵中的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com