我有一个数组[2; 3]
和一个矩阵[ 1 3 4 5; 2 4 9 2]
。
现在我想从第一行中提取第二个元素,从第二行中提取第三个元素,从而获得[3 ; 9]
。我设法用循环来做它,但由于我正在使用更大的数组,我想避免这些。
答案 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))
的作用:
A(:,cols)
选择cols
的{{1}}列,其A
列k
对应A(:,cols)
列cols(k)
},给予A
; [3 4; 4 9]
返回此矩阵的对角线条目,从而返回diag
k
个k
对角线元素的位置A(:,cols)
,即A(k,cols(k))
。