Tiled Neomatrix on different pins - only first defined works

Here's the whole code. The output to the serial monitor is "⸮L⸮Number of LEDs: 0" (I'm swapping out matrix1 & matrix2 on the numLEDs declaration between runs)

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>


#define matrixWidth 16
#define matrixHeight  16
#define tilesX  2
#define tilesY  1

Adafruit_NeoMatrix matrix2 =  Adafruit_NeoMatrix(matrixWidth,matrixHeight, tilesX, tilesY, 4,  
  NEO_MATRIX_TOP   + NEO_MATRIX_RIGHT   + NEO_MATRIX_ROWS   + NEO_MATRIX_ZIGZAG +
  NEO_TILE_TOP + NEO_TILE_RIGHT + NEO_TILE_ROWS,
  NEO_GRB + NEO_KHZ800);
    
Adafruit_NeoMatrix matrix1 =  Adafruit_NeoMatrix(matrixWidth,matrixHeight, tilesX, tilesY, 2,  
  NEO_MATRIX_TOP   + NEO_MATRIX_RIGHT   + NEO_MATRIX_ROWS   + NEO_MATRIX_ZIGZAG +
  NEO_TILE_TOP + NEO_TILE_RIGHT + NEO_TILE_ROWS,
  NEO_GRB + NEO_KHZ800);





void setup() {

  // Start the serial interface
  Serial.begin(57600);


  
  matrix1.begin();
  matrix1.setTextWrap(false);
  matrix1.setBrightness(5);

  
  matrix2.begin();
  matrix2.setTextWrap(false);
  matrix2.setBrightness(5);

  uint16_t numLEDs = matrix2.numPixels();
  Serial.print("Number of LEDs: ");
  Serial.print(numLEDs);
}
 
 
void loop() {



showTop();
showBottom();

}

void showTop() {
  
  matrix1.fillScreen(matrix1.Color(0,128,0));
  matrix1.show();

}

void showBottom() {
  
  matrix2.fillScreen(matrix2.Color(0,0,128));
  matrix2.show();

}