Pyomo operates at a scalar level. We have the concept of indexed components, which can be multi-dimensional, but expressions still need to be generated using scalar operations.
When NumPy objects are used in this way, they actually perform worse than their respective built-in Python types. So while NumPy is still a generally useful tool to use alongside Pyomo (for importing / generating / analyzing data), it is better to convert NumPy array objects to Python lists (or lists of lists, etc.) before using them to build a Pyomo model. I think there is a method on NumPy arrays called “tolist” that does this for you.
If you are using a ConcreteModel, and you import the data prior to building the model (e.g., by passing the data into a function that creates the model), then you do not need to convert the data to Param objects. You can simply using it directly to build objective / constraint expressions and to define index sets.
Gabe