Numpy: трансляция одного элемента в массив len n - PullRequest
0 голосов
/ 28 января 2020

Предположим, у меня есть датафрейм.

Этот информационный кадр имеет строковое содержимое. Мне нужно сделать следующее:

for i in range(0,100000):
   label = raw.values[i,3]
   stackable = np.asarray([label for i in range(40)]).reshape((-1,1))
   data.append(np.hstack(some_other_data,stackable))

Это небольшой пример того, что я пытаюсь сделать, и это занимает очень много времени в python. Каков «правильный» способ сделать это, используя numpy?

Ответы [ 2 ]

1 голос
/ 28 января 2020

full должен быть быстрым (er) способом «репликации» строки в массиве:

In [84]: np.full(4, 'label')                                                                     
Out[84]: array(['label', 'label', 'label', 'label'], dtype='<U5')
In [85]: alist = []                                                                              
In [86]: labels = ['one','two','three']                                                          
In [87]: for i in range(3): 
    ...:     temp=np.full(3,labels[i]) 
    ...:     alist.append(temp) 
    ...:                                                                                         
In [88]: alist                                                                                   
Out[88]: 
[array(['one', 'one', 'one'], dtype='<U3'),
 array(['two', 'two', 'two'], dtype='<U3'),
 array(['three', 'three', 'three'], dtype='<U5')]
In [89]: np.array(alist)                                                                         
Out[89]: 
array([['one', 'one', 'one'],
       ['two', 'two', 'two'],
       ['three', 'three', 'three']], dtype='<U5')

или со списком:

In [91]: np.array([np.full(3,l,'U7') for l in labels])                                           
Out[91]: 
array([['one', 'one', 'one'],
       ['two', 'two', 'two'],
       ['three', 'three', 'three']], dtype='<U7')
0 голосов
/ 28 января 2020

Замена

stackable = np.asarray([label for i in range(40)]).reshape((-1,1))

на

stackable = np.asarray([label]*40).reshape((-1,1))

повышает производительность моей машины на 10-20%. Может быть что-то еще можно сделать, но трудно сказать, не зная немного больше о data и some_other_data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...