Use neither. np.append is just another way of calling concatenate, one that takes 2 arguments instead of a list. So both are relatively expensive, creating a new array with each call. Plus it is hard to get the initial value correct, as you have probably found.
List append is the correct way to build an array. The result will be a list or list of lists. That can be turned into an array with np.array or one of the stack (concatenate) functions at the end.
Try:
values=[]
for i in range(diff.shape[0]):
add=np.array([[i,j,k,fScore,costMST,1]])
values.append(add)
values = np.stack(values)
Since add is 2d, this use of stack will make a 3d. You might want vstack instead (or np.concatenate(values, axis=0) is the same thing).
Or try:
values=[]
for i in range(diff.shape[0]):
add=[i,j,k,fScore,costMST,1]
values.append(add)
values = np.array(values)
this makes a list of lists, which np.array turns into a 2d array.
mcvecould be nicenp.emptyand just insert at that index, or you could usenp.h/v/dstack.