Here is a modification of your code where you can add the meta query if certain $GET keys are set.
$query_array = array('relation' => 'AND');
if(isset($_GET['gender']) && !empty($_GET['gender'])){
$gender = $_GET['gender'];
array_push($query_array, array('key' => 'wpcf-gender', 'value' => $gender, 'compare' => '='));
}
if(isset($_GET['city']) && !empty($_GET['city'])){
$city = $_GET['city'];
array_push($query_array, array('key' => 'wpcf-city', 'value' => $city, 'compare' => '='));
}
if(isset($_GET['state']) && !empty($_GET['state'])){
$state = $_GET['state'];
array_push($query_array, array('key' => 'wpcf-state', 'value' => $state, 'compare' => '='));
}
$wp_query = new WP_Query( array(
'post_type' => 'profile',
//'query' => $query_array, should be 'meta_query' => $query_array,
'meta_query' => $query_array,
'paged' => $paged )
);
Reference:
array_push()
: http://php.net/manual/en/function.array-push.php