【问题标题】:Choose one element in arrays选择数组中的一个元素
【发布时间】:2020-03-20 18:55:15
【问题描述】:

我有N 数组组。例如,每个组包含 3 个数组。 现在我想从这些组中只取一个数组,并用B数组取一个产品。

例如:

  • A 已给出 3D 数组,2x2x32

  • 我拆分 A 并得到 B_i ( 2 x 2 x 8),也是 3D 数组,但 i=1,..., 8。这意味着B_i 被形成为A 的切片。

  • 每个B_i 都有子数组,二维数组 2x2 :C_k

B_1(:,:,m)=C_1, where m is size( B_i, 3)

在每个 B_i 中有 8 个子数组 C_k。我正在寻找一种算法,它可以帮助我随机抽取其中一个(C_k 之一)并稍后将其用于另一个计算。

如何在 B_i 中实现随机选择数组?

【问题讨论】:

    标签: arrays matlab random


    【解决方案1】:

    您想要一个随机列,索引为1, 2, 3。因此,不要将numel(A) 设置为randi() 中的最大整数,而是将其设置为3

    A = rand(2,2,3,5); % three 2-by-2 matrices, in each of 5 groups
    B = rand(2,2); % Chosen for convenience; replace as warranted
    
    % Preallocate C to have the same size as A_k * B, with as many groups
    C = zeros([size(A,1),size(A,2),size(A,4)]);
    
    for ii=1:size(A,4)  % Loop over all groups/slices
        % Choose a random column in {1, 2, 3} for each slice ii
        C(:,:,ii) = A(:,:,randi(3),ii)*B;
    end
    

    在此示例中,有 5 个组(A 的第四维),每个组有三个条目(第三维),由 2 个 -by- 2 个矩阵组成(前两个维)。因此,遍历每个组,第四维,在第三维上通过randi(3) 选择一个随机的A 矩阵,然后将剩余的两个维与B 相乘,并存储在C 中。 C 将具有 A_k * B 的维度,在本例中选择为 2 -by- 2,第三维度为 A 中的组数。

    【讨论】:

    • 我已尝试在我的模拟中添加您的建议。它不起作用。你能添加一个如何使用它的例子吗?
    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2014-07-23
    相关资源
    最近更新 更多