from numpy import newaxis data = load('iris.data', delimiter=',') labels = data[:,4] inputs = data[:,:4] inputs = inputs-inputs.mean(0)[newaxis,:] #mean center using broadcasting v,e = eig(cov(inputs)) outputs = dot(inputs,e[:,:2]) scatter(outputs[:,0], outputs[:,1], 30, labels)