OneScience-Group/ShapeNetCar
ShapeNetCar Dataset Description The ShapeNetCar dataset comes from the paper Learning Three-dimensional Flow for Interactive Aerodynamic Design by Umetani and Bickel, published in ACM Transactions on Graphics (SIGGRAPH 2018). Based on three-dimensional car geometries from ShapeNet, the dataset uses CFD simulations to obtain velocity fields around the vehicles, surface pressure, and drag coefficients. It supports research on rapidly predicting aerodynamic physical… See the full description on the dataset page: https://huggingface.co/datasets/OneScience-Group/ShapeNetCar.
01.9k
1import os,sys2import numpy3import random4import math5import torch6 7def splitScalar_NFold(X,Y,N_fold):8 nt = X.shape[0]9 assert Y.shape[0] == nt10 11 aX = []12 aY = []13 for j in range(N_fold):14 aX.append(X[j])15 aY.append(numpy.array([Y[j]]))16 for i in range(N_fold,nt):17 j = random.randint(0,N_fold-1)18 aX[j] = numpy.vstack( (aX[j],X[i,:]) )19 aY[j] = numpy.append(aY[j],Y[i]) 20 return aX,aY21 22def split_train_validate(aX,aT,ind_fold):23 N = len(aX)24 m = aX[0].shape[1]25 Xt = numpy.empty((0,m))26 Tt = numpy.empty((0,))27 Xv = numpy.empty((0,m))28 Tv = numpy.empty((0,))29 for j in range(N):30 if j == ind_fold:31 Xv = numpy.vstack((Xv,aX[j]))32 Tv = numpy.append(Tv,aT[j])33 else:34 Xt = numpy.vstack((Xt,aX[j]))35 Tt = numpy.append(Tt,aT[j]) 36 Xt = Xt.astype(numpy.float32)37 Tt = Tt.astype(numpy.float32) 38 Xv = Xv.astype(numpy.float32)39 Tv = Tv.astype(numpy.float32) 40 return Xt,Tt,Xv,Tv41 42def LeastSquare_SVD(X,Y,alpha0):43 nt = X.shape[0]44 one = numpy.ones((nt,1))45 X1 = numpy.hstack((X,one))46 Ux, Dx, Vx = numpy.linalg.svd(X1, full_matrices=False)47 nt0 = Dx.shape[0]48 for i in range(nt0):49 x = Dx[i]50 Dx[i] = x/(x*x+alpha0)51 DxInv = numpy.diag(Dx)52 W0 = numpy.dot(numpy.dot(Vx.T, DxInv), Ux.T)53 W1 = Y54 print("W0: "+str(W0.shape))55 print("w1: "+str(W1.shape))56 return W0,W157 58def LeastSquare_SVD_Eval(X,W0,W1):59 nt = X.shape[0]60 one = numpy.ones((nt,1))61 X1 = numpy.hstack((X,one))62 XW0 = numpy.dot(X1,W0)63 XW0W1 = numpy.dot(XW0,W1)64 return XW0W165 66 67def loadXT():68 X = numpy.load("I2_0.npy") 69 X = numpy.vstack((X,numpy.load("I2_1.npy")))70 X = numpy.vstack((X,numpy.load("I2_2.npy")))71 X = numpy.vstack((X,numpy.load("I2_3.npy")))72 X = numpy.vstack((X,numpy.load("I2_4.npy")))73 X = numpy.vstack((X,numpy.load("I2_5.npy")))74 X = numpy.vstack((X,numpy.load("I2_6.npy")))75 X = numpy.vstack((X,numpy.load("I2_7.npy")))76 X = numpy.vstack((X,numpy.load("I2_8.npy")))77 78 T = numpy.load("Cd_0.npy")79 T = numpy.append(T, numpy.load("Cd_1.npy")) 80 T = numpy.append(T, numpy.load("Cd_2.npy")) 81 T = numpy.append(T, numpy.load("Cd_3.npy")) 82 T = numpy.append(T, numpy.load("Cd_4.npy")) 83 T = numpy.append(T, numpy.load("Cd_5.npy")) 84 T = numpy.append(T, numpy.load("Cd_6.npy")) 85 T = numpy.append(T, numpy.load("Cd_7.npy")) 86 T = numpy.append(T, numpy.load("Cd_8.npy")) 87 return X,T88 89def main():90 X,T = loadXT()91 assert( X.shape[0] == T.shape[0] )92 93 N_fold = 994 N_sample = 495 ES = []96 for ind_sample in range(N_sample):97 aX,aT = splitScalar_NFold(X,T,N_fold)98 for ind_fold in range(N_fold):99 print("n-fold split",ind_sample,ind_fold,aX[ind_fold].shape," ",aT[ind_fold].shape)100 E = []101 for ind_fold in range(N_fold):102 Xt,Tt,Xv,Tv = split_train_validate(aX,aT,ind_fold)103 print(ind_sample,ind_fold)104 print("train size:",Xt.shape,Tt.shape)105 print("validate size:",Xv.shape,Tv.shape) 106 W0,W1 = LeastSquare_SVD(Xt,Tt,0.8)107 Yv = LeastSquare_SVD_Eval(Xv,W0,W1)108 Ev = Yv-Tv109 E.extend(Ev)110 E = numpy.asarray(E)111 assert E.shape[0] == X.shape[0]112 stdE = numpy.linalg.norm(E)113 stdE = math.sqrt(stdE*stdE/E.shape[0])114 print("standard deviation",stdE)115 ES.append(stdE)116 ES = numpy.asarray(ES)117 numpy.savetxt("StandardDeviations"+".txt",ES)118 119 120if __name__ == "__main__":121 main()122 