Mac 및 Linux 환경에 Numo:::NArray 및 Numo:Linalg 설치

입문


Numo:::NArray는 Ruby 벡터 매트릭스 연산의 라이브러리로 Python의 Numpy에 해당합니다.Numo::Linalg는 선형 대수에 사용되는 라이브러리입니다. 예를 들어 특징 값 분해,numpy입니다.linalg와scipy.linalg에 해당한다.
  • https://github.com/ruby-numo/numo-narray
  • https://github.com/ruby-numo/numo-linalg
  • Numo::Linalg는 백엔드 라이브러리로 Blas/Lapack을 사용하기 때문에 이것을 준비하고 Numo::Linalg에 알려야 합니다.
  • Selecting Backend Library
  • 이에 비해 Numo::Linalg는 백그라운드 라이브러리를 자동으로 가져오는 메커니즘을 제공합니다. (예:/usr/local/lib) 일반적인 설치 라이브러리의 디렉터리만 검색합니다.본고에서 우리는 백그라운드 라이브러리에서 OpenBLAS를 사용하여 일련의 설치 절차와 조작 확인을 보여 줄 것이다.
    Mac은 macOS Mojave10.14.4, Linux는 Ubuntu18.04.2를 사용했습니다.루비가 rbenv 등에 설치되었습니다.

    OpenBLAS 설치


    Mac


    Homebrew에서 쉽게 설치할 수 있습니다.--"with-openmp"옵션은 OpenMP를 통한 병행화에 도움이 됩니다.
    $ brew install openblas --with-openmp
    

    Linux (Ubuntu)


    apt-get에 설치할 수 있지만, 원본 구축에서 가장 적합한 환경을 얻을 수 있습니다.make 시 USE_OpenMP를 열면 OpenMP의 병렬화에 도움이 됩니다.생성할 때 PREIX에 일반적으로 라이브러리나 헤더 파일이 배치되는/usr/local 디렉토리를 지정합니다.
    $ sudo apt-get install gcc gfortran
    $ wget https://github.com/xianyi/OpenBLAS/archive/v0.3.5.tar.gz
    $ tar xzf v0.3.5.tar.gz
    $ cd OpenBLAS-0.3.5
    $ make USE_OPENMP=1
    ...
    $ sudo make PREFIX=/usr/local install
    ...
    

    설치 Numo::NArray 및 Numo::Linalg


    gem 명령으로 설치할 수 있습니다.Numo::Linalg는 Numo::NArray에 의존하므로 Numo::Linalg,Numo::NArray를 설치하면 함께 설치됩니다.
    $ gem install numo-linalg
    

    동작 확인


    irb를 사용하여 동작을 확인합니다.Numo::Linalg, Numo::NArray를 가져오면간단한 행렬적 가져오기 (Numo:Linalg를 통해 Blas의 행렬적 함수를 사용하여 Numo::NArray의 행렬적 대신 계산) 과 QR 분해 (Lapack의 함수 중 하나) 를 사용할 수 있습니다.
    irb(main):001:0> require 'numo/linalg/autoloader'
    => true
    irb(main):002:0> x = Numo::DFloat.new(2, 4).rand
    => Numo::DFloat#shape=[2,4]
    [[0.0617545, 0.373067, 0.794815, 0.201042],
     [0.116041, 0.344032, 0.539948, 0.737815]]
    irb(main):003:0> x.dot(x.transpose)
    => Numo::DFloat#shape=[2,2]
    [[0.815142, 0.713004],
     [0.713004, 0.967739]]
    
    Numo::Linalg를 로드하고 행렬 곱셈을 실행했습니다.그리고 실행QR 분해.QR 분해는 행렬을 정교 행렬 Q와 상삼각 행렬 R로 분해한다.Q와 R의 행렬은 원래의 행렬로 쌓인다.
    irb(main):004:0> q, r = Numo::Linalg.qr(x)
    => [Numo::DFloat#shape=[2,2]
    [[-0.469794, -0.882776],
     [-0.882776, 0.469794]], 
        Numo::DFloat#shape=[2,4]
    [[-0.13145, -0.478968, -0.850053, -0.745774],
     [0, -0.16771, -0.447979, 0.169146]]]
    irb(main):005:0> q.dot(r)
    => Numo::DFloat#shape=[2,4]
    [[0.0617545, 0.373067, 0.794815, 0.201042],
     [0.116041, 0.344032, 0.539948, 0.737815]]
    

    Windows 환경에서?


    Windows 10 Fall Creators Update를 시작으로 Windows Subsystem for Linux(WSL)는 Windows에서 Linux 환경을 사용할 수 있습니다.Ubuntu도 설치할 수 있습니다.WSL에서 준비한 Ubuntu에서 상기와 같은 방법으로 Numo:::NArray와 Numo:Linalg를 사용할 수 있음을 확인했습니다.

    WSL의 설치는 다음과 같은 보도를 이해하기 쉽다.
  • @IT[WSL 입문]부터 제1회 Windows10 표준 Linux 환경 WSL
  • 끝내다


    Numo:::NArray 및 Numo::Linalg는 루비가 NumpyScipy에 해당하는 행렬 연산을 할 수 있도록 합니다.Numo::NArray와numpy 방법의 대응은 아래 공식 문서를 참고할 수 있습니다.
  • Numo vs numpy
  • 100 narray exercises
  • 좋은 웹페이지 즐겨찾기