我很难理解使用时间序列概念进行生物医学图像聚类和分割的技术。该课题所依据的论文是: M. Lacomi等。 al,基于的乳腺摄影图像分割 混沌映射聚类算法 download link。
D维空间中有一组 N 点{ r _i}。 [0,1]中的实数变量 x _i符合每个点,成对相互作用 J _ij = exp [ - ( r _i - r _j)^ 2 / 2a ^ 2]其中a是局部长度比例。系统的时间演变由
给出函数f
与神经网络中的激活函数非常相似。
logistic map是一个单峰和单变量离散时间非线性动力系统。
我正在寻找一种更快更有效(矢量化)的方式来应用Eq(1)
N = 100万个点是图像的特征。 t跨越1到10次演变。我的方式但不确定代码是否正确。我随机生成一个维数D = 50且包含100个数据点的矩阵R.
N = 100;
D = 50;
T =10;
R = rand(N,D);
x = zeros(N,T);
y(1) = rand();
for i = 1:N %// for loop indicating the number of sample points
y(i+1) = 1-2*y(i)^2; %/* the iterations of the map f */
r_1(i) = R(i,:);
r_2(i) = R(i+1,:);
sum_j = 0.0;
for t = 1:T
x(i,:)= y;
a = var(r(i));
J = {exp(-(r_1(i) - r_2(i+1))^2)}/2a;
sum_j = sum_j+J*(1-2*x(i+1,t)));
x(i,t) = (1/c(i))*(sum_j);
end
end
使用矩阵的小型实现,其中每行是数据元素,列是维度,这对于扩展多维图像的代码非常有用。我很难编写Eq(1)代码。
答案 0 :(得分:1)
我不认为我可以在这个问题上给出一个简单的最终答案,但我绝对可以给你一些有用的提示:
提前计算一次矩阵J
。其中的信息是静态的,因此您不想重新计算。同上,Ci
。
部分sum(Jij*yj)
实际上是带有矢量的矩阵的乘积。这可以通过线性代数最快地完成,即J*y
。
对函数f
进行向量化:而不是分别对每个元素执行f(x_i),一次执行f(x)。例如。使用f(x) = 1-2*x.^2
代替.^
的{{1}}会对x的每个元素执行幂运算符。
您可能希望将时间迭代作为外部循环。这是您需要执行的唯一顺序计算。所有其余的,你想尽可能使用矢量化和线性代数同时做(〜并行)。
这应该给你一个很好的起点。如果之后还有其他需要帮助的内容,请更新您的问题或发表评论。在这一点上,我只能这样做。部分原因是因为您的代码示例不是非常清晰/描述性的。如果有特殊原因,你可能想添加评论。
祝你好运!代码示例:
^
您并不真正需要向量% Jmod is a modification of the matrix J:
% 1. Jmod(i,j) = J(i,j)/C(i) ==> the division by Ci is included
% 2. Jmod(i,i) = 0 ==> the diagonal elements are zero such that the term
% for i=j is not included in the sum.
% Memory allocation
x = zeros(N,T+1);
y = zeros(N,T+1);
% Initialization with your choice of x0
x(:,1) = x0;
% Time iterations
for t=1:T
y(:,t) = 1 - 2*x(:,t).^2;
x(:,t+1) = Jmod*y(:,t);
end
和x
,但为了清晰起见,我在此示例中使用了它们。