gpt4 book ai didi

matlab - 如何将向量转换为矩阵,其中列上的值为 1,其中列号是向量元素,否则为 0?

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:48 25 4
gpt4 key购买 nike

我不确定如何表述这个问题,但我认为举个例子会有所帮助。假设我有一个向量 y = [3;1;4;1;6]。我想创建矩阵 Y =

[0     0     1     0     0     0;
1 0 0 0 0 0;
0 0 0 1 0 0;
1 0 0 0 0 0;
0 0 0 0 0 1]

↑ ↑ ↑ ↑ ↑ ↑
1 2 3 4 5 6

其中每一列的元素是一或零,对应于向量中的值。

我发现我可以用

Y = []; for k = 1:max(y); Y = [Y (y==k)]; end

我可以不用 for 循环吗(如果 y 有数千个元素,这种方法是否更有效)?

谢谢!

最佳答案

您的方法效率不高,因为您在 not a good programming practice 循环中增加了 Y 的大小.以下是如何修复您的代码:

Ele = numel(y); 
Y= zeros(Ele, max(y));
for k = 1:Ele
Y (k,y(k))= 1;
end

还有一种没有循环的替代方法:

Ele = numel(y);          %Finding no. of elements in y
Y= zeros(Ele, max(y)); % Initiailizing the matrix of the required size with all zeros
lin_idx = sub2ind(size(Y), 1:Ele, y.'); % Finding linear indexes
Y(lin_idx)=1 % Storing 1 in those indexes

关于matlab - 如何将向量转换为矩阵,其中列上的值为 1,其中列号是向量元素,否则为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152272/

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