[英]Converting a 1D numpy array to a list of lists
我想將一維numpy數組拆分為列表列表,但是我不確定如何做到這一點。
基本上我正在處理一個充滿標簽的數組:
array(['java database servlets derby', 'java graphics groovy awt basic',
'java lucene', ..., 'javascript android',
'iphone ios ipad file uiimage',
'javascript jquery transition effect'], dtype=object)
形狀:
(5000L,)
如您所見,每一行都包含用空格分隔的標簽。 我想將每一行存儲為列表,並將所有標記作為單獨的元素存儲,並將這些列表組合為列表。 結果應如下所示:
list_of_lists = [["tag","tag","tag"],["tag","tag","tag"]...]
我怎樣才能做到這一點? 而且,如果你們知道實現我想要的更好的方法(即一種數據結構,可以在其中訪問每個標記作為指定行的元素),那么我將很高興聽到它。
提前致謝。
使用列表str.split
:
>>> from numpy import array
>>> a = array(['java database servlets derby', 'java graphics groovy awt basic',
... 'java lucene', 'javascript android',
... 'iphone ios ipad file uiimage',
... 'javascript jquery transition effect'])
>>> list_of_lists = [x.split() for x in a]
>>> list_of_lists
[['java', 'database', 'servlets', 'derby'],
['java', 'graphics', 'groovy', 'awt', 'basic'],
['java', 'lucene'],
['javascript', 'android'],
['iphone', 'ios', 'ipad', 'file', 'uiimage'],
['javascript', 'jquery', 'transition', 'effect']]
具有dtype=object
的數組與falsetru
答案中的版本具有falsetru
dtype='|S35'
之間存在字幕差異。 第一個是指向字符串的指針數組,另一個是長度為35的6個字符串,總共210個字節。 [x.split() for x in a]
兩者相同。 但是object
數組允許:
for i in range(6): a[i]=a[i].split()
生產
array([['java', 'database', 'servlets', 'derby'],
['java', 'graphics', 'groovy', 'awt', 'basic'], ['java', 'lucene'],
['javascript', 'android'],
['iphone', 'ios', 'ipad', 'file', 'uiimage'],
['javascript', 'jquery', 'transition', 'effect']], dtype=object)
如果所有這些子列表的長度相同或填充為相同的長度,則可以將它們放入結構化數組中。 例如
array([('java', 'database', 'servlets', 'derby', ''),
('java', 'graphics', 'groovy', 'awt', 'basic'),
('java', 'lucene', '', '', ''),
('javascript', 'android', '', '', ''),
('iphone', 'ios', 'ipad', 'file', 'uiimage'),
('javascript', 'jquery', 'transition', 'effect', '')],
dtype=[('f0', 'S10'), ('f1', 'S10'), ('f2', 'S10'), ('f3', 'S10'), ('f4', 'S10')])
那么您可以按名稱訪問所有“行”中的特定字段
a2['f0']
# array(['java', 'java', 'java', 'javascript', 'iphone', 'javascript'],dtype='|S10')
這是numpy,請不要使用循環:P您可以使用np.char.split
一次將split
應用於數組的所有元素:
A = np.char.split(A)
如果您只想要一個列表,則無需將其列出
我可以訪問每個標簽作為指定行的元素的數據結構
只是數組可以正常工作:
>>> A = np.char.split(A)
>>> A[0]
['java', 'database', 'servlets', 'derby']
>>> A
array([['java', 'database', 'servlets', 'derby'],
['java', 'graphics', 'groovy', 'awt', 'basic'], ['java', 'lucene'],
['javascript', 'android'],
['iphone', 'ios', 'ipad', 'file', 'uiimage'],
['javascript', 'jquery', 'transition', 'effect']], dtype=object)
但是您可以使用以下方法將其轉換為列表:
>>> A.tolist()
[['java', 'database', 'servlets', 'derby'],
['java', 'graphics', 'groovy', 'awt', 'basic'],
['java', 'lucene'],
['javascript', 'android'],
['iphone', 'ios', 'ipad', 'file', 'uiimage'],
['javascript', 'jquery', 'transition', 'effect']]
(請注意,如果您的dtype是object
,請首先使用A = A.astype('S')
使其成為字符串數組。)
老實說,在長度為5000的數組中,這似乎與循環理解的速度大致相同。 np.char
可能在np.char
沒有太大不同。
順便說一句,如果您不將熊貓用於其他任何事情,則可以使用numpy本身讀取文本。 如果文件如下所示:
java database servlets derby
java graphics groovy awt basic
java lucene
javascript android
iphone ios ipad file uiimage
javascript jquery transition effect
然后:
A = np.genfromtxt('tags.txt', dtype='S', delimiter='\n')
A = np.char.split(A)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.