Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改矩阵值±;一个特定的索引值-MATLAB_Matlab - Fatal编程技术网

修改矩阵值±;一个特定的索引值-MATLAB

修改矩阵值±;一个特定的索引值-MATLAB,matlab,Matlab,我试图创建一个模型,其中有一条线-表示为填充了1的1D矩阵-线上的点随机生成。每次选择一个点(a),它就会创建一个“排除区”(基于指数函数),这样选择附近的另一个点的概率就会低得多 两个主要问题: (1) 生成指数的最佳方法是什么,这样我就可以乘以所选点周围的数字来创建排除区?我知道exppdf,但是我不确定这是否允许我创建一个以1结尾的指数,因为我需要排除区结束,并且概率最终返回到1 (2) 如何修改矩阵值加/减特定索引(包括该索引)?我得到的结果是: x(1:100) = 1; % Cre

我试图创建一个模型,其中有一条线-表示为填充了1的1D矩阵-线上的点随机生成。每次选择一个点(a),它就会创建一个“排除区”(基于指数函数),这样选择附近的另一个点的概率就会低得多

两个主要问题:

(1) 生成指数的最佳方法是什么,这样我就可以乘以所选点周围的数字来创建排除区?我知道exppdf,但是我不确定这是否允许我创建一个以1结尾的指数,因为我需要排除区结束,并且概率最终返回到1

(2) 如何修改矩阵值加/减特定索引(包括该索引)?我得到的结果是:

x(1:100) = 1; % Creates a 1D-matrix populated with 1's
p = randi([1 100],1,1);
x(p) = 
但我不知道如何使用随机生成的数字来改变矩阵中的值

任何帮助都将不胜感激


安娜< /P> < P>不要担心<代码> ExpPDF<代码>,选择你想要的宽度(距离选定点有多远,概率返回到1?),并定义一些简单函数,使中间的零向量为零,边上的向量为1。所以这里我只是修改了长度11的一部分,以

p
为中心,对
x
的其余部分不做任何修改:

x(1:100)=1;
p = randi([1 100],1,1);
% following just scaled
somedist = (abs(-5:5).^2)/25;
% note - this will fail if p is at edges of data, but see below
x(p-5:p+5)=x(p-5:p+5).*somedist;
然后,您可以使用允许给定权重的
datasample
来代替使用
randi
来拾取点。在这种情况下,您的“数据”只是数字1:100。然而,为了使边缘更容易,我建议使用一个“权重”向量进行初始化,该向量具有零填充-这些
x
部分将不会从中取样,但可以避免您进行边缘检查

x = zeros([1 110]);
x(6:105)=1;
somedist = (abs(-5:5).^2)/25;
nsamples = 10;

for n = 1:nsamples
    p = datasample(1:110,1,'Weights',x);
    % if required store chosen p somewhere
    x(p-5:p+5)=x(p-5:p+5).*somedist;
end
对于指数排除区,您可以执行以下操作:

somedist = exp(abs(-5:5))/exp(5)-exp(0)/exp(5);
它并没有完全回到1,但相当接近。以下是两次单独运行后的
x
(忽略填充)的中心区域:

我认为您需要添加一个示例。我在努力理解你想要达到的目标。即使你不会写代码,你能详细说明你需要实现的步骤并给出结果矩阵吗?这是一个非常有趣的方法。非常感谢你。我很好奇“Weights”参数是如何工作的,因为文档中不太清楚-这是否会改变第二个(或第三个…)样本出现的可能性?基本上,
datasample
从数据集中随机选取大量样本。如果给定了权重,则并非所有样本的可能性相等,而是样本被拾取的可能性与权重成正比。因此,如果在应用“排除区”后,一个位置的权重为0.5,那么它被
datasample
拉出的可能性应该是仍然权重为1的位置的一半。不应该选择标记为“0”的示例。这非常有用。出于好奇,“权重”是否可以应用于指定的范围,例如0.0-10.0,或者它是否只处理0.0-1.0,并且需要您对数据进行标准化?快速查看代码(对于许多内置函数,您只需在命令行中键入
edit functionname
,就可以看到代码),代码似乎已标准化。但是没有负数,楠的,等等。