【发布时间】:2015-05-19 01:32:58
【问题描述】:
我目前正在尝试在一个非常大的矩阵(大约 400x300 个元素)中选择一个 0 的子集并将它们的值更改为 1。我能够做到这一点,但它需要使用一个循环来选择每个实例randperm 向量中的下一个值。也就是说,矩阵中 50% 的 0 是随机选择的,一次一个,然后变成 1:
z=1;
for z=1:(.5*numberofzeroes)
A(zeroposition(rpnumberofzeroes(z),1),zeroposition(rpnumberofzeroes(z),2))=1;
z=z+1;
end
其中 'A' 是矩阵,'zeroposition' 是一个 2 列宽的矩阵,其中 0 的位置在矩阵中(如果你喜欢,也可以是“坐标”),而 'rpnumberofzeros' 是一个 randperm 向量1 到矩阵中零的数量。
例如,对于 z=20,代码可能是这样的:
A(3557,2684)=1;
...所以出现在 A 中这个位置的 0 现在将是 1。
它执行这个循环数千次,因为 .5*numberofzeroes 是一个非常大的数字。这不可避免地需要很长时间,所以我的问题是可以在不使用循环的情况下完成吗?或者至少,以某种方式占用更少的处理资源/时间?
正如我所说,唯一需要做的就是完全随机选择 50%(或任何比例)的 0 更改为 1。
提前感谢您的帮助,如果我能解决任何问题,请告诉我!我是新来的,所以如果我做了任何失礼,请提前道歉。
【问题讨论】: