当前位置: 首页 > 知识库问答 >
问题:

MATLAB:随机选择向上/向下舍入向量的每个元素

裴存
2023-03-14

我有一个120x1双数组,它只包含值1、0.5和0。

使用ceil功能可以轻松地将0.5的值全部四舍五入,或者使用floor功能将值全部四舍五入。但是,我想随机决定向量中每个0.5值是向上舍入到1还是向下舍入到0,同时保持所有10元素不变。

有没有一种方法可以做到这一点,而不会循环通过向量的每个元素?

共有1个答案

章飞虎
2023-03-14

您可以执行以下步骤:

  1. 找出0.5项在原始数组中的哪个索引
  2. 为每个条目生成一个0到1之间的随机数
  3. 那些新生成的数字,并将它们分配给原始数组
% generate demo data
n = 120;
v = [0, 0.5, 1];
data = v(randi(length(v), n, 1))';

% randomly round up or down the 0.5 entries
zero_point_five_idx = find(data==0.5);
data(zero_point_five_idx) = round(rand(size(zero_point_five_idx)));

更简单的是:为每个0.5条目随机生成01

possible_values = [0,1];
zero_point_five_idx = find(data==0.5);
data(zero_point_five_idx) = possible_values(randi(length(possible_values), size(zero_point_five_idx)));
 类似资料:
  • 本文向大家介绍如何从R向量中选择随机元素?,包括了如何从R向量中选择随机元素?的使用技巧和注意事项,需要的朋友参考一下 从R向量中随机选择元素可确保无偏选择,因为在进行随机选择时,向量中的每个元素都具有由随机选择过程(特别是简单的随机采样选择过程)选择的相等概率。要从R向量中随机选择一个或多个元素,我们可以使用样本函数。 示例 在这里,由于向量x1的大小不大于样本大小500而导致错误。如果要创建一

  • 我试图生成一个具有以下特征的整数随机向量: 我想在每个区间生成不同数量的值,每个区间必须只有唯一的值。我以为是randperm,但我不能定义最小和最大间隔,例如V1 V2,我会得到下面的向量,其中

  • 主要内容:引用向量的元素,向量运算向量是数字的一维数组。在MATLAB中,允许创建两种类型的向量 - 行向量 列向量 行向量 行向量是通过用方括号中的元素集合来创建的,使用空格或逗号分隔元素。 MATLAB将执行上述语句并返回以下结果 - 列向量 列向量是通过用方括号中的元素集合来创建的,分号用于分隔元素。 MATLAB将执行上述语句,返回以下结果 - 引用向量的元素 可以通过多种方式来引用一个或多个向量的元素。向量的第个分量叫作

  • 我目前正试图通过改变算法来优化一些MATLAB/Octave代码,但不知道如何处理一些随机性。假设我有一个整数向量V,每个元素代表一些东西的计数,在我的例子中是光子。现在,我想随机选取一些“东西”,创建一个大小相同的新向量,但要调整计数。 以下是我目前的做法: 这是上面描述的一个相当简单的实现。但是它有一个明显的性能缺陷:函数创建一个向量(idxV),每个光子包含一个元素。所以如果我的V只有100

  • 第一步是生成大量的随机数并存储它们在一个向量中。“大量”我指的是20个。在开始应该使用一个可控范围的数值,这将有益于调试,之后在增加它的规模。 接下来的函数将会使用一个参数,用来表示向量的长度。它用于申请分配一个新的向量用作存储int型数据,并且用0至upperBound-1之间的随机数填充。 apvector randomVector (int n, int upperBound) { apve

  • 有人能告诉我怎么打双人球吗 e、 g.从双倍值55.6666666666667开始-四舍五入到双倍值56.0000000000- 或者从55.333333333333开始-四舍五入到55.0000000000的两倍- 谢谢。