@@ -837,61 +837,70 @@ def write_csv_rows(list data, list data_index, int nlevels, list cols, object wr
837
837
838
838
@ cython.boundscheck (False )
839
839
@ cython.wraparound (False )
840
- def create_hdf_rows_2d (ndarray indexer0 ,
840
+ def create_hdf_rows_2d (ndarray indexer0 ,
841
+ object dtype ,
841
842
ndarray[np.uint8_t , ndim = 1 ] mask,
842
843
ndarray[np.uint8_t , ndim = 1 ] searchable,
843
- list values ):
844
+ list values ):
844
845
""" return a list of objects ready to be converted to rec-array format """
845
846
846
847
cdef:
847
- int i, b, n_indexer0, n_blocks, tup_size
848
- list l
849
- object tup, val, v
848
+ int i, l, b, n_indexer0, n_blocks, tup_size
849
+ ndarray result
850
+ tuple tup
851
+ object v
850
852
851
853
n_indexer0 = indexer0.shape[0 ]
852
854
n_blocks = len (values)
853
855
tup_size = n_blocks+ 1
854
- l = []
855
856
856
- for i from 0 <= i < n_indexer0:
857
+ result = np.empty(n_indexer0,dtype = dtype)
858
+ l = 0
859
+ for i in range (n_indexer0):
857
860
858
861
if not mask[i]:
859
-
862
+
860
863
tup = PyTuple_New(tup_size)
861
- val = indexer0[i]
862
- PyTuple_SET_ITEM(tup, 0 , val)
863
- Py_INCREF(val)
864
864
865
- for b from 0 <= b < n_blocks:
865
+ v = indexer0[i]
866
+ PyTuple_SET_ITEM(tup, 0 , v)
867
+ Py_INCREF(v)
868
+
869
+ for b in range (n_blocks):
866
870
867
- v = values[b][:, i]
871
+ v = values[b][i]
868
872
if searchable[b]:
869
873
v = v[0 ]
874
+
870
875
PyTuple_SET_ITEM(tup, b+ 1 , v)
871
876
Py_INCREF(v)
872
877
873
- l.append(tup)
878
+ result[l] = tup
879
+ l += 1
874
880
875
- return l
881
+ return result[ 0 :l]
876
882
877
883
@ cython.boundscheck (False )
878
884
@ cython.wraparound (False )
879
885
def create_hdf_rows_3d (ndarray indexer0 , ndarray indexer1 ,
886
+ object dtype ,
880
887
ndarray[np.uint8_t , ndim = 2 ] mask,
881
888
ndarray[np.uint8_t , ndim = 1 ] searchable,
882
889
list values ):
883
890
""" return a list of objects ready to be converted to rec-array format """
884
891
885
892
cdef:
886
- int i, j, b, n_indexer0, n_indexer1, n_blocks, tup_size
887
- list l
888
- object tup, val, v
893
+ int i, j, l, b, n_indexer0, n_indexer1, n_blocks, tup_size
894
+ tuple tup
895
+ object v
896
+ ndarray result
889
897
890
898
n_indexer0 = indexer0.shape[0 ]
891
899
n_indexer1 = indexer1.shape[0 ]
892
900
n_blocks = len (values)
893
901
tup_size = n_blocks+ 2
894
- l = []
902
+ result = np.empty(n_indexer0* n_indexer1,dtype = dtype)
903
+ l = 0
895
904
for i from 0 <= i < n_indexer0:
896
905
897
906
for j from 0 <= j < n_indexer1:
@@ -900,45 +909,49 @@ def create_hdf_rows_3d(ndarray indexer0, ndarray indexer1,
900
909
901
910
tup = PyTuple_New(tup_size)
902
911
903
- val = indexer0[i]
904
- PyTuple_SET_ITEM(tup, 0 , val)
905
- Py_INCREF(val)
906
-
907
- val = indexer1[j]
908
- PyTuple_SET_ITEM(tup, 1 , val)
909
- Py_INCREF(val)
912
+ v = indexer0[i]
913
+ PyTuple_SET_ITEM(tup, 0 , v)
914
+ Py_INCREF(v)
915
+ v = indexer1[j]
916
+ PyTuple_SET_ITEM(tup, 1 , v)
917
+ Py_INCREF(v)
910
918
911
919
for b from 0 <= b < n_blocks:
912
920
913
- v = values[b][:, i, j]
921
+ v = values[b][i, j]
914
922
if searchable[b]:
915
923
v = v[0 ]
924
+
916
925
PyTuple_SET_ITEM(tup, b+ 2 , v)
917
926
Py_INCREF(v)
918
927
919
- l.append(tup)
928
+ result[l] = tup
929
+ l += 1
920
930
921
- return l
931
+ return result[ 0 :l]
922
932
923
933
@ cython.boundscheck (False )
924
934
@ cython.wraparound (False )
925
935
def create_hdf_rows_4d (ndarray indexer0 , ndarray indexer1 , ndarray indexer2 ,
936
+ object dtype ,
926
937
ndarray[np.uint8_t , ndim = 3 ] mask,
927
938
ndarray[np.uint8_t , ndim = 1 ] searchable,
928
939
list values ):
929
940
""" return a list of objects ready to be converted to rec-array format """
930
941
931
942
cdef:
932
- int i, j, k, b, n_indexer0, n_indexer1, n_indexer2, n_blocks, tup_size
933
- list l
934
- object tup, val, v
943
+ int i, j, k, l, b, n_indexer0, n_indexer1, n_indexer2, n_blocks, tup_size
944
+ tuple tup
945
+ object v
946
+ ndarray result
935
947
936
948
n_indexer0 = indexer0.shape[0 ]
937
949
n_indexer1 = indexer1.shape[0 ]
938
950
n_indexer2 = indexer2.shape[0 ]
939
951
n_blocks = len (values)
940
952
tup_size = n_blocks+ 3
941
- l = []
953
+ result = np.empty(n_indexer0* n_indexer1* n_indexer2,dtype = dtype)
954
+ l = 0
942
955
for i from 0 <= i < n_indexer0:
943
956
944
957
for j from 0 <= j < n_indexer1:
@@ -949,29 +962,28 @@ def create_hdf_rows_4d(ndarray indexer0, ndarray indexer1, ndarray indexer2,
949
962
950
963
tup = PyTuple_New(tup_size)
951
964
952
- val = indexer0[i]
953
- PyTuple_SET_ITEM(tup, 0 , val)
954
- Py_INCREF(val)
955
-
956
- val = indexer1[j]
957
- PyTuple_SET_ITEM(tup, 1 , val)
958
- Py_INCREF(val)
959
-
960
- val = indexer2[k]
961
- PyTuple_SET_ITEM(tup, 2 , val)
962
- Py_INCREF(val)
965
+ v = indexer0[i]
966
+ PyTuple_SET_ITEM(tup, 0 , v)
967
+ Py_INCREF(v)
968
+ v = indexer1[j]
969
+ PyTuple_SET_ITEM(tup, 1 , v)
970
+ Py_INCREF(v)
971
+ v = indexer2[k]
972
+ PyTuple_SET_ITEM(tup, 2 , v)
973
+ Py_INCREF(v)
963
974
964
975
for b from 0 <= b < n_blocks:
965
976
966
- v = values[b][:, i, j, k]
977
+ v = values[b][i, j, k]
967
978
if searchable[b]:
968
979
v = v[0 ]
969
980
PyTuple_SET_ITEM(tup, b+ 3 , v)
970
981
Py_INCREF(v)
971
982
972
- l.append(tup)
983
+ result[l] = tup
984
+ l += 1
973
985
974
- return l
986
+ return result[ 0 :l]
975
987
976
988
# -------------------------------------------------------------------------------
977
989
# Groupby-related functions
0 commit comments