Yes, absolutely, the normal method is allocating the arrays at runtime with malloc() and reading their content from a file. Preferably a binary file. Aside from the memory error, it is not very practical to define 3000 constants in code.
PCA is certainly an interesting approach. Let me know if any coding questions come up and I'll help.