使用另一个数组中的索引从2d数组中提取值(不带循环)

时间:2017-01-07 17:43:10

标签: matlab find indices

我有一个数组[2; 3]和一个矩阵[ 1 3 4 5; 2 4 9 2]。 现在我想从第一行中提取第二个元素,从第二行中提取第三个元素,从而获得[3 ; 9]。我设法用循环来做它,但由于我正在使用更大的数组,我想避免这些。

2 个答案:

答案 0 :(得分:4)

您可以使用sub2ind将每个列标签(及其行标签)转换为linear index,然后使用 索引到您的矩阵中。< / p>

# https://github.com/chocolatey/choco/wiki/CommandsReference#how-to-pass-options--switches 
# Powershell specific argument passing
# You must be on the latest beta of chocolatey for this to work properly (redownload files)

choco upgrade chocolatey -y

$originalPath = $env:PATH

choco install ruby --version 2.1.8 -my -x86 --install-arguments '/verysilent /dir=""c:\tools\ruby21"" /tasks=""assocfiles""' --override-arguments
choco install ruby --version 2.1.8 -fmy --install-arguments '/verysilent /dir=""c:\tools\ruby21-x64"" /tasks=""assocfiles""' --override-arguments
choco install ruby --version 2.3.1 -my -x86 --install-arguments '/verysilent /dir=""c:\tools\ruby23"" /tasks=""assocfiles""' --override-arguments
choco install ruby --version 2.3.1 -fmy --install-arguments '/verysilent /dir=""c:\tools\ruby23-x64"" /tasks=""assocfiles,modpath""' --override-arguments

Write-Output "Attempting Good DevKit2 Installations"
# DevKit for Ruby 2.x x64
$env:PATH=$originalPath
choco install ruby2.devkit -y 
Move-Item c:\tools\DevKit2 C:\tools\DevKit2-x64 -Force -EA Continue

# DevKit for Ruby 2.x x86
choco install ruby2.devkit -y -x86 -f

Write-Output "Fixing DevKit Installations"

@"
---
- c:/tools/ruby21
- c:/tools/ruby23
"@ | Out-File c:\tools\DevKit2\config.yml -Force -Encoding UTF8
pushd c:\tools\DevKit2
ruby dk.rb install -f
popd

@"
---
- c:/tools/ruby21-x64
- c:/tools/ruby23-x64
"@ | Out-File c:\tools\DevKit2-x64\config.yml -Force -Encoding UTF8
pushd c:\tools\DevKit2-x64
ruby dk.rb install -f
popd

choco install pik -y

cmd /c C:\tools\pik\pik.bat add c:\tools\ruby21\bin
cmd /c C:\tools\pik\pik.bat add c:\tools\ruby21-x64\bin
cmd /c C:\tools\pik\pik.bat add c:\tools\ruby23\bin
cmd /c C:\tools\pik\pik.bat add c:\tools\ruby23-x64\bin

或者,您可以自己计算线性指数,这将比A = [1 3 4 5; 2 4 9 2]; cols = [2; 3]; % Compute the linear index using sub2ind inds = sub2ind(size(A), (1:numel(cols)).', cols); B = A(inds) % 3 % 9

更高效。
sub2ind

答案 1 :(得分:3)

通过利用diag功能,您可以获得优雅的单行解决方案:

A = [1 3 4 5; 2 4 9 2];
cols = [2; 3];

B = diag(A(:,cols))
%   3
%   9

以下是diag(A(:,cols))的作用:

  1. A(:,cols)选择cols的{​​{1}}列,其Ak对应A(:,cols)cols(k) },给予A;
  2. [3 4; 4 9]返回此矩阵的对角线条目,从而返回diag kk对角线元素的位置A(:,cols),即A(k,cols(k))