Ste*_*ing 2 matlab matrix vectorization octave
以下是八度代码(kmeans的一部分)
centroidSum = zeros(K);
valueSum = zeros(K, n);
for i = 1 : m
for j = 1 : K
if(idx(i) == j)
centroidSum(j) = centroidSum(j) + 1;
valueSum(j, :) = valueSum(j, :) + X(i, :);
end
end
end
Run Code Online (Sandbox Code Playgroud)
代码有效,是否可以对代码进行矢量化?没有if语句很容易对代码进行矢量化,但是如何使用if语句对代码进行矢量化?
我假设代码的目的是计算m一n维空间中一组数据点的子集的质心,其中点存储在矩阵中X(点x坐标),向量idx为每个数据点指定子集( 1 ... K)这个点属于.然后部分矢量化是:
centroid = zeros(K, n)
for j = 1 : K
centroid(j, :) = mean(X(idx == j, :));
end
Run Code Online (Sandbox Code Playgroud)
在if由索引消除,在特定的逻辑索引:idx == j给出一个布尔阵列,其指示哪些数据点属于子集j.
我认为也可能摆脱第二个for循环,但这会导致非常复杂,难以理解的代码.