Have a look at the .mmio.array
property of the IP driver. This will give you a NumPy array which is backed on to the AXI interface. You can then create an array of data and assign it all in one go
import numpy as np
data = np.array([0x...., 0x...], dtype='u4')
add_ip.mmio.array[:] = data
This might not use the AXI full interface to it’s full potential depending on what Linux and the C runtime library do but it will be a lot faster than your current approach.
Peter