gpt4 book ai didi

arrays - 是否可以使用索引数组对三维数组的二维进行索引?

转载 作者:行者123 更新时间:2023-12-04 04:34:48 25 4
gpt4 key购买 nike

我已阅读示例 here ,但它似乎不包括以下情况。

A是一个维度为 128 x 128 x 3 的三维数组.

我想通过为前两个维度选择随机对,从这个数组中随机选择 3 个整数集。这是我目前的尝试:

rng(1);                                         
choicex = randi(128, 1, 16)
choicey = randi(128, 1, 16)
random_values = A(choicex, choicey,:)

不幸的是,这个矩阵 random_values现在是 16 x 16 x 3 ,当我希望它是 16 x 3 .
取其中的一部分是行不通的,因为要么所有的第一个索引都相同,要么所有的第二个索引都相同。
我不需要那个 random_values携带原始索引。

有什么方法可以直接在 matlab 中使用索引表示法实现这一点,而无需编写 for 循环?

根据给定的答案,我已经更新了问题。

最佳答案

您的代码有两个问题:

  • randi(nmax, i, j) 返回大小 (i,j)来自 1..nmax 的随机整数矩阵.在您的情况下,nmax显然必须是 128,而不是 256。
  • matlab 有基于 1 的索引,而不是基于 0 的索引,所以不要减去 1。

  • 这对我有用:
    >> A = randn(128,128,3);
    >> choicex = randi(128, 1, 16);
    >> choicey = randi(128, 1, 16);
    >> B = A(choicex, choicey,:);
    >> size(B)

    ans =

    16 16 3

    但这将给出给定行和列的所有组合的所有三元组,因此总共 256 个三元组。您真正想要的可以通过 sub2ind 实现,但这不是一个简单的表达:
    A(sub2ind(size(A), repmat(choicex,3,1), repmat(choicey,3,1), ...
    repmat([1;2;3],1,16)))

    或者少几个字符:
    A(sub2ind(size(A), [1;1;1]*choicex, [1;1;1]*choicey, [1;2;3]*ones(1,16)))

    关于arrays - 是否可以使用索引数组对三维数组的二维进行索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915171/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com