One alternative is to LOAD DATA into a temporary table, then copy the temporary table to the real table.
CREATE TEMPORARY TABLE Matrix_temp LIKE Matrix_2;
LOAD DATA INFILE '0.csv' INTO TABLE Matrix_temp; -- not a prepared statement
SET @matrix_creation = CONCAT('CREATE TABLE Matrix_',@matrices_last_id,
' LIKE Matrix_2');
PREPARE stmt from @matrix_creation;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @matrix_insertion = CONCAT('INSERT INTO Matrix_',@Matrices_last_id,
' SELECT * FROM Matrix_temp');
PREPARE stmt from @matrix_insertion;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Beware of the risk of using temporary tables in this way if you also use replication. If the slave restarts, temporary tables are lost. If this happens between populating the temporary table and copying it to a permanent table, then you can break replication.
It sounds like such a thing would never happen, and yet this is pretty common.
See http://dev.mysql.com/doc/refman/5.6/en/replication-features-temptables.html