Jump to content

9 Screenshots

About This File

Eigen4AutoIt Features:

  • free, fast matrix computing environment for Windows (runs under Wine on Linux and Mac)
  • built upon the robust Eigen code base (open-source), with many enhancements
  • simple, intuitive functions, with extensive online documentation
  • supports integer, single, and double precision, in real and complex matrices
  • Tutorials with scripts, plus Test scripts for each function section
  • easily exchange data between native binary files (.mat) and ASCII, Excel, and Xbase files, or AutoIt arrays
  • 32-bit (x86-mode) and 64-bit (x64-mode) support
  • in x64-mode, matrices can be any size that fits into available virtual memory (>4GB), and can be shared between processes
  • over one thousand alias wrappers for flexibility and ease-of-use


The Eigen4AutoIt thread is here:

This computing environment allows you to do matrix I/O (memory & files), matrix arithmetic, transformation, reduction, and decomposition, solve systems of linear equations, and perform statistics. Most functions can act on integer, real, or complex matrices (or the latter's real/imaginary parts separately). Much of the actual complexity of using Eigen in its native C++ environment has been hidden for AutoIt users, through extensive bounds and error checks, an intuitive function-naming convention, a large help file, and detailed tutorials and test examples.

What's New in Version 5.2a


E4A v5.2 (16 Jan 2021) (the 2020 HindSight Release); 5.2a adds two minor patches (affecting x64 when redefining workspace, and matrixfileconverter utility).

  • Added: matrix transformation functions _Eigen_Rotate/_InPlace, for rotating an entire matrix in 90-degree steps, clockwise or counter-clockwise.
  • Added: cellwise functions _Eigen_CwiseBinary/Logical/Scalar/UnaryOp_Diag/_InPlace, acting on the diagonal.
  • Added: transformation functions _Eigen_Translate_Diag_InPlace and _Eigen_Translate_Block_InPlace.
  • Added: transformation functions _Eigen_Clamp_Block/Col/Diag/Row and _Eigen_Translate_Block/Col/Diag/Row.
  • Added: work environment function: _Eigen_IsScalar, to detect matrices with a single row and a single column.
  • Added: CwiseUnaryOp operators "inc"(rement) (operator ID: 27) and "dec"(rement) (operator ID: 28).
  • Added: internal function _Eigen_Check_MatrixType, conditionally called in internal function _Eigen_GetPtr.
  • Added: optional $overwrite parameter for all _Eigen_ConvertMatrixFile* functions, relevant when a single filename is parsed.
  • Added: work environment functions _Eigen_Re/SetIgnoreNoSwap, to control whether an error is signalled when parsing the same matrix part twice to a Swap function.
  • Added: explicit support for _Eigen_Swap_ALower_AUpper and _Eigen_Swap_ALower_BUpper.
  • Added: work environment x64 function: _Eigen_DefineWorkSpace, to change shared memory allocation for subsequent _Eigen_StartUp calls from within a current session; latter function amended to support this.
  • Added: globals $EIGEN_LASTERROR and $EIGEN_LASTERRORMSG to facilitate debugging.


  • Changed: Eigen includes for dlls upgraded to stable release version 3.3.9.
  • Changed: _Eigen_Copy_A*_ToB*, _Eigen_CopyMasked_A*_ToB*, and _Eigen_CloneMatrix now return $matB instead of $matA to facilitate chained calling. This is a script-breaking change.
  • Changed: transformation functions _Eigen_Sort_Block/Col/Row and _Eigen_Reverse_Block/Col/Row now produce output dimensions that match the specified matrix part (matching Cwise functions' output). This is a script-breaking change.
  • Changed: all dll calls returning uint64 or int64 have been standardised to return the latter (signed) type only.
  • Changed: internal global array $EIGEN_ActiveMatrices renamed to $EIGEN_ACTIVE_MATRIX_IDS, to reduce confusion with global bitflag container $EIGEN_ACTIVE_MATRICES.
  • Changed: internal global variable $EIGEN_VARTYPE renamed to $EIGEN_MATRIXTYPEID; internal global variables $VARTYPE_* renamed to $EIGEN_MATRIXTYPEID_*.
  • Changed: _Eigen_ResetActiveMatrix (which affects all active matrices) renamed to _Eigen_ResetActiveMatrices for clarity; original function name reassigned (see below). This is a script-breaking change.
  • Changed: _Eigen_ResetActiveMatrix_Single renamed to _Eigen_ResetActiveMatrix for clarity; original name remains supported through alias wrapper.
  • Changed: _Eigen_Copy_AStrictlyLower_ToBLower renamed to _Eigen_Copy_AStrictlyLower_ToBStrictlyLower for consistency; original name remains supported through alias wrapper.
  • Changed: _Eigen_Copy_AStrictlyUpper_ToBUpper renamed to _Eigen_Copy_AStrictlyUpper_ToBStrictlyUpper for consistency; original name remains supported through alias wrapper.
  • Changed: dimension checks in _Eigen_Multiply moved up to prevent memory leak upon mismatch error.
  • Changed: _Eigen_IsActiveMatrix now also accepts multiple matrix letters in a single input string, returning False unless all parsed matrix references are currently active.
  • Changed: _Eigen_ReleaseFromMarker now also prunes global arrays $EIGEN_ACTIVE_MATRICES and $EIGEN_ACTIVEMATRIX_IDS.
  • Changed: _Eigen_CwiseBinaryOp_Block/_InPlace and _Eigen_ConditBinaryOp_Block/_InPlace block parameters renamed for clarity.
  • Changed:  _Eigen_CwiseBinaryOp_ColwiseCol/RowwwiseRow/_InPlace col/row parameter renamed for clarity.
  • Changed: if $EIGEN_VERBOSE is set, _Eigen_Show_MatrixProfile now also outputs to console.
  • Changed: Help documentation _Eigen_Cwise*Op double matrix part-referencing functions _ColCol/ColRow/RowCol/RowRow hidden for consistency; UDF/dll support unaffected.
  • Changed: various discrepancies resolved between UDF and dll parameter names.


  • Fixed: _Eigen_ReleaseMatrix_All did not return any status upon completion.
  • Fixed: _Eigen_Cwise*Op_RowCol_InPlace and _Eigen_Cwise*Op_RowCol_InPlace dll functions only partially implemented intermediate evaluation.
  • Fixed: _Eigen_CwiseUnaryOp_ColRow returned the wrong matrix ID.
  • Fixed: various issues in _Eigen_CreateMatrix_LinSpaced_* alias preprocessing.
  • Fixed: _Eigen_Transpose's refactored UDF code was mangled.
  • Fixed: _Eigen_CopyAvector_To*Vector optional size parameter check did not handle the default case correctly.
  • Fixed: flawed/incomplete application of bitnor binary expression in dll part of _EIgen_CwiseLogicalOp.
  • Fixed: _Eigen_Reverse_Block had wrong output dimensions specified.
  • Fixed: _Eigen_Sort_Block allocated block-sized output, but dll expected a full-sized output matrix (dll fixed).
  • Fixed: _Eigen_Sort_EigenVectors did not filter for input matrix U (eigenvectors) being square.
  • Fixed: _Eigen_Sort_Unique* did not check validity of final output container.
  • Fixed: _Eigen_Translate* used wrong dll return type.
  • Fixed: _Eigen_ConditMask_Diag had wrong output dimensions.
  • Fixed: _Eigen_Find_Col/Diag/Row dll function returned relative instead of absolute offset.
  • Fixed: removed redundant parameter $epsilon in _Eigen_HasNaN and _Eigen_HasInfinity.
  • Fixed: Help description lacked optional parameter $epsilon in several _Eigen_Is* functions.
  • Fixed: Help description lacked second (optional) row/column parameter for _Eigen_IsCwiseEqual_AB_Col/Row.
  • Fixed: removed redundant parameter $matZ in _Eigen_Decomp_HouseholderQR definition.
  • Fixed: _Eigen_Decomp_RealQZ test for real input matrix would always pass.
  • Fixed: application of optional damping parameter $lambda in dll part of _EIgen_LDA.

User Feedback

You may only provide a review once you have downloaded the file.

There are no reviews to display.

  • Similar Content

    • By RTFC
      The Eigen C++ template library is a great environment for matrix computing; it is fast, reliable, extensive, and well-documented. It is also completely free, and does not rely on any external dependencies. Unfortunately for AutoIt users, the term “template library” implies that any functions you call are only instantiated upon compilation (in C++). That means there's nothing to hook into.
      To make Eigen ’s most important functionality directly accessible from within AutoIt scripts (version 3.3.12+, download it here), I developed the Eigen4AutoIt environment. It runs on Windows and under Wine also on Linux and Mac (Ubuntu, Debian, Fedora, and MacOS supported by WineHQ), and SUSE, Slackware, and FreeBSD supported by the distros).
      >Download the latest version

      It consists of:
      1) Eigen4AutoIt.au3
      an AutoIt library of wrapper functions that contain extensive bounds checks, matrix management, file I/O, type conversion, and precision control, and two-way data exchange with files and native AutoIt arrays;
      2) Eigen-wrapper dlls (EigenDense.dll, EigenDense_x64.dll)
      re-maps matrices created in AutoIt as Eigen Matrix objects, then calls Eigen’s powerful core functions; in the spirit of open-source, the full C++ source code I wrote is included in the bundle (see subdirectory "source"). The basic functions consist of a single Eigen call; decompositions and statistics are more involved. 3) Additional materials:
      the user-interactive, animated Function Selector and MatrixViewer tools the MatrixFileConverter to read/write E4A matrices from/to .csv ASCII, Excel, and Xbase files. three libraries of scientific and mathematical constants online Help, with example code for every function Large (.chm) Help file (for offline access) Quickstart Manual (11-page pdf, updated) Test suite Tutorials from Basics to Advanced Please note:
      none of this is part of Eigen's own distribution you only need this bundle; you do not need to install Eigen. How it works:
      No matrix content is ever transferred, only memory pointers, meaning computations in AutoIt are virtually as fast as in Eigen’s native environment, with the added advantage of not having to be compiled first. The drawback is that Eigen's native ad-hoc expression templates (and their internal optimisations) cannot be exploited here; you have to construct your operations with the basic building blocks. These provide matrix creation, I/O, cellwise operations, reduction, multiplication, transformation, decomposition (LU, Householder, Choleski, and Jacobi SVD; these include general linear solvers) and a small statistics module by yours truly.

      IMPORTANT: Posting Rules for this thread:
      1) Do not post or PM me any matrix-, maths-, or Eigen-related questions. Eigen has its own User Forum for that (or try math.stackExchange.com). I am not your maths guru! If you post such questions, I will either ignore your post or remind you of this rule.

      2) Do not post or PM me your data sets and/or non-working Eigen4AutoIt scripts; I will not analyse your data or fix your scripts for you! There are many reasons why a linear algebra procedure might fail to produce the answer you expect. You are wielding great mathematical power here, so exploit the fantastic internet resources at your fingertips and learn how to use it. To get you started, I've listed a few video tutorials and other helpful materials in the header remarks of Eigen4AutoIt.au3. Also check out the test scripts, the Tutorials, and the Help file.

      3) I do warmly welcome all of the following:
      remarks, advice, suggestions for improvements, encouragement, cash; bug reports re. the Eigen4AutoIt interface (individual functions that don't work the way they should) and/or the associated dll code (ditto); your own working Eigen4AutoIt templates of general use that you'd like to see implemented in a future release. Regarding that last item, have a look at my PCA tutorial. After the step-by-step stage, I summarise the entire procedure in a "mini script" of Eigen4AutoIt calls. Then I introduce the two internal PCA functions I developed, which replace that script with two simple calls. You can do the same thing, and submit your own functional Eigen4AutoIt script in this thread. If I consider it of general use and can implement it, it may become a new Eigen4AutoIt function in the next release (with source acknowledgement, of course). This means that you'd get a precompiled dll version of your script that will likely run faster and be simpler to call. Thereby this thread would become an Eigen4AutoIt Example Scripts mini forum. It's just a thought.
      >Download the latest version (uncompressed size: 38.4 MB)
      How to Install
      You need AutoIt version 3.3.12 or later. Simply run the installer, navigate to the tutorial subdirectory, open the first tutorial ("Basics") in Scite, and start it. This shows basic matrix I/O and mode switching (single versus double precision). If that runs, you're in business.
      NB to leverage the full power of x64 features, you'll also need to have the full Scite4AutoIt3 package installed. For more info, see sections "Bitness" and "Shared Memory" in the Help, main topic: "Work Environment" page.
    • By RTFC
      The Short Version:
      This set of well-annotated example scripts shows how to solve sudoku puzzles with simple, powerful bitmask functions applied on a massive scale, demonstrating both common solving techniques and highly-optimised brute-force.
      All you need is:
      to like sudoku's basic logic primary school maths to download & install this bundle (v1.2; 25 July 2020) and this #include file (v5.1+) the CrossFilter GUI
    • By Ascer
      1. Description
      Anti-bot system to avoid spam. Vector graphic style generates 4 random numbers from 0-9 and create a picture. 2. Requirements
      .NET Framework 1.1 - 4.5 (on this version Microsoft destroy old rules) 3. Possibilities.

      Source package Capatcha.rar
    • By Ascer
      Do you have any idea to resize Vector graphic using some maths trick?
      It's example to create Vector image 10x10px and write A
      Local $a10x10 = [ _ 1,1,1,1,1,1,1,1,1,1, _ 1,1,1,0,0,0,0,1,1,1, _ 1,1,0,0,1,1,0,0,1,1, _ 1,1,0,1,1,1,1,0,1,1, _ 1,1,0,1,1,1,1,0,1,1, _ 1,1,0,0,0,0,0,0,1,1, _ 1,1,0,1,1,1,1,0,1,1, _ 1,1,0,1,1,1,1,0,1,1, _ 1,0,0,0,1,1,0,0,0,1, _ 1,1,1,1,1,1,1,1,1,1 _ ] Local $oVector = ObjCreate("WIA.Vector.1") If Not IsObj($oVector) Then ConsoleWrite("+++ Error " & @error & " durning create a Vector.object." & @CRLF) Exit EndIf Local $iBlue = 0xFF0000FF ; ARGB color Local $iWhite = 0xFFFFFFFF ; adding pixels to vector For $i = 0 To UBound($a10x10) - 1 Local $iPixel = $a10x10[$i] Local $iColor = $iBlue If $iPixel = 0 Then $iColor = $iWhite $oVector.Add($iColor) Next ; create a img 10x10 px Local $oImg = $oVector.ImageFile(10, 10) ; path to file Local $sPath = @ScriptDir & "\Vector.bmp" ; delete previous file if exits. FileDelete($sPath) ; save img to script direction. $oImg.SaveFile($sPath) ; show result, you have to use 800% size to see effects. ShellExecute("Vector.bmp")  
    • By AlecSadler
      Hello friends! I have been working on an encryption algorithm in autoit as a proof of concept for some time now. Basically the algorithm uses a progressive recursion to encode data inside a matrix using a key that changes according to the date-time of the system, which is extracted from a larger key array. Recently after a drive failure, I lost the source and had to start from scratch, now I can't quite get it working the way it was before, and I can't see what I'm doing wrong, if anyone who understands matrix math or encryption could help I would much appreciate it. The problem is that the values returned by the decryption (extraction) process are way too big.
      I have figured out the solution to my problem, it was a typo, please disregard this thread.
      I will post my project into example scripts when it's ready.
  • Create New...