Matlab can call user Python modules via the
Matlab external language interface.
For concurrent Python modules using asyncio, you may need to create a shim function to allow Matlab to call the Python module.
Anaconda Python works fine from Matlab.
Configure Matlab for Python: Matlab is designed to work with specific Python versions for each Matlab version.
Matlab will not specifically tell you when you’re using an incompatible Python version, but you may get unstable operation or errors.
pyenv
Python environment manager configures the Python interface.
The Python executable is found from Terminal / Command Prompt:
python -c "import sys; print(sys.executable)"
For Windows, it may be like C:/Miniconda3/python.exe and for macOS / Linux it may be like ~/Miniconda3/python.
This Matlab command is persistent–Matlab remembers this Python choice even after restarting Matlab.
pyenv(Version='C:/Miniconda3/python.exe')
Verify Matlab → Python config by typing pyenv from within Matlab.
If only Python standard library modules work, and even commonly used modules like Numpy will not work, errors may occur from Matlab like:
py.numpy.arange(1)
Unable to resolve the name py.numpy.arange
Try diagnosing the issue from Matlab like:
pyenv
help('py.numpy')
Verify the desired Python install is being used, and that there isn’t an error as below.
If such an error occurs, check the PATH as seen by Matlab by:
getenv('PATH')
If the Python directories are missing, this may be why user modules are not importable in Python.
These paths can be added to Matlab.
On Windows, the necessary path is like ~/Miniconda3/Library/bin, the directory with lots of *.{so,dylib,dll} files and the fix is like:
The install path on non-Windows OS is like ~/miniconda3/lib.
This command can be issued after a Python command was attempted, it’s not necessary to restart Matlab.
Note that this needs to be in PATH, since PYTHONPATH does not help in this case.
This change does not persist across Matlab sessions.
If it works for you, put it in the
~/Documents/MATLAB/startup.m
file to have it reload each time Matlab is started.
This Numpy problem is fixed by the procedure above:
problem in numpy - ImportError:
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy c-extensions failed.
- Try uninstalling and reinstalling numpy.
- If you have already done that, then:
1. Check that you expected to use Python3.7 from "C:/Miniconda3/python.exe",
and that you have no directories in your PATH or PYTHONPATH that can
interfere with the Python and numpy version "1.17.4" you're trying to use.
2. If (1) looks fine, you can open a new issue at
https://github.com/numpy/numpy/issues. Please include details on:
- how you installed Python
- how you installed numpy
- your operating system
- whether or not you have multiple versions of Python installed
- if you built from source, your compiler versions and ideally a build log
- If you're working with a numpy git repository, try `git clean -xdf`
(removes all files not under version control) and rebuild numpy.
Note: this error has many possible causes, so please don't comment on
an existing issue about this - open a new one instead.
Original error was: DLL load failed: The specified module could not be found.
Python module import is implicit in the Matlab → Python module function call. There is no need to import numpy etc. from Matlab
Python executable choice persists across Matlab sessions–Matlab “remembers” even after you restart Matlab or reboot the computer.
editing imported Python module code requires restarting Matlab to take effect.
Starting with Windows 25H2, WMIC.exe (Windows Management Instrumentation Command-line) has been removed from the operating system. Microsoft recommends using PowerShell cmdlets for managing and querying system information instead.
There is a
migration guide
available to help users transition from WMIC to PowerShell cmdlets that
invoke WMI.
There are a lot of .bat batch scripts and .ps1 PowerShell scripts that use WMIC.exe, but they can be updated to use PowerShell cmdlets instead.
Build systems like
CMake
and
Meson
have specific syntax and variables to manage shared library creation and linking.
By default, CMake builds static libraries, but this can be changed by setting the
BUILD_SHARED_LIBS
variable to ON or by setting the
SHARED type option of the add_library() command.
To use C, C++, Fortran, etc. library binaries from Python, shared libraries are required to load the compiled code at runtime in Python.
Of course, the Python code must be configured to match the symbols in the shared library.
Meson builds shared libraries by default, but this can be changed by setting the default_library option to static in
project()
or by the shared_library() function.
Hugo content Markdown files cannot use Hugo variables directly.
The way to access variables (including
site parameters,
data sources,
and front matter) from content Markdown files is to use Hugo
shortcodes
or to use a custom template for those content pages.
However, areas inside
code fences
cannot use shortcodes.
What I wanted to do was make examples of code inside code fences used on several pages on my site update with a version number.
However, I don’t currently see a feasible way to do this with Hugo that wouldn’t be overly specific to the particular set of examples.
It’s OK, I wanted to note this limitation I ran into.
An alternative is to use find/replace across files like “sed” or the VSCode GUI.
To run Linux programs on a Windows computer, normally Windows Subsystem from Linux (built into Windows by Microsoft) is generally the best / most performant way to run most Linux programs, especially programs relevant to data processing and geospace science in general.
The macOS network interface priority order determines which network interface (like WiFi, Ethernet, etc.) the system uses first when multiple interfaces are available.
Set this priority order through the
System Preferences
or via the
command line:
Several countries have created an 8 meter ham band near 40 MHz.
The USA FCC has a proposed rulemaking
RM-11843
to create an 8 meter ham band in the USA.
A key conflicting user SNOTEL, which used meteorburst communications to connect very remote sites, has
ceased use
of the 40 MHz band.
As
commenters
indicate, a rich surplus equipment market exists of military surplus radios and commercial equipment that can be used on the 8 meter ham band.
Proposed bandplans allocate FM, CW, and digital modes.
This 8 meter band proposal stands in contrast to the 2014 proposal to make a 4m 70 MHz allocation as exists in numerous other countries around the world.
The FCC
summarily dismissed
the 4m proposal due to incumbent TV channel 4 users.
Use
this link
to query the FCC TV database for channel 4 users.
For example, in 2025 there were about 10 full-power DTV licensees (including newly coming on air) across the USA on TV channel 4, an increase from 2014 licensees.
Since other countries have
allocations
close to 70 MHz, the best option for USA ham in the 4m band may be to co-exist in the 72-76 MHz
band,
perhaps in-between the existing 20 kHz spaced channels.
Since typical 4m radios cover 66 MHz - 88 MHz, for international DX, USA hams could receive on 70 MHz and transmit on 72-76 MHz channels.
This would be akin to operations for international DX for USA hams in the 60 meter channelized band.
A general rule for compiling and running old code in any language is to first try to get it working for known input / output via emulation or virtual machine.
Many old codes were made before linters and other correctness checks we’ve long taken for granted.
The codes may use non-standard tricks to boost efficiency that haven’t been significant for decades.
A modern Fortran compiler that can compile Fortran 66 standard code without modification is Intel oneAPI.
The
-f66
flag enables Fortran 66 compatibility.
A key behavior difference with Fortran 66 is that Do loops always run at least once.
This behavior is not available in Gfortran.
If one has the ability to use a virtual machine with unmaintained compilers like g77 and the -fonetrip flag, this behavior can be emulated.
However, this behavior was simply
not addressed
in the
Fortran 66 standard.
After correct operation is established, Fortran 66 code often needs adjustments to work with modern compilers.
The Fortran Wiki has an excellent article on
modernizing Fortran syntax.
Always make a copy of the file first.
Sometimes 10,000+ lines will match so it can be tedious to check.
Similar operations may be needed if a mix of tabs and spaces are used.
To move line numbers left, run this regex and replace with null (nothing):
^\s+(?=\d+\s)
To make code start in column 7, recall that fixed format (Fortran <= 77) code has line numbers in columns 1-5 of each line numbers
After the prior operation, push the actual code right of column 6 by replacing this regex with appropriate number of spaces:
(?<=^\d+\s+)
Other compatibility notes:
$ can be used like a semicolon in CDC Cyber Fortran
put procedures in separate files for duplicated line numbers.
Matlab has numerous factory toolboxes that are referred to in two distinct ways: “Product Names” and “Feature Names”.
The “Product Name” is the official plain English name of the toolbox, while the “Feature Name” is a more specific identifier used within Matlab.
For example, “MATLAB Test” is the Product Name, and “MATLAB_Test” is also the Feature Name.
The mapping between names is not always just by replacement of spaces with underscores.
To programmatically access the list of toolboxes Product Names, use the ver command in Matlab, which returns a structure array containing both the Product Names.
Then extract the Feature Names from the structure.