簡體   English   中英

將列表轉換為 Python 中的矩陣

[英]converting list into a matrix in Python

如果您有一個元素列表,可以說:

res = 
['(18,430)', '(19,430)', '(19,429)', '(19,428)', '(19,427)', '(18,426)', '(17,426)', '(17,425)', '(17,424)', '(17,423)', '(17,422)', '(17,421)', '(17,420)', '(16,421)', '(14,420)', '(11,419)', '(9,417)', '(7,416)', '(4,414)', '(3,414)', '(2,412)', '(1,412)', '(-1,410)', '(-2,409)', '(-2,408)', '(-3,407)', '(-3,406)', '(-3,405)', '(-3,404)', '(-3,403)', '(-3,402)', '(-3,401)', '(-3,400)', '(-4,399)', '(-4,398)', '(-5,398)', '(-6,398)', '(-7,397)', '(-7,396)', '(-6,395)', '(-5,395)', '(-4,393)', '(-3,391)', '(6,384)', '(12,378)', '(24,370)', '(42,358)', '(107,304)', '(151,255)', '(207,196)', '(259,121)', '(389,-28)', '(456,-84)', '(515,-134)', '(569,-182)', '(650,-260)', '(688,-294)', '(723,-317)', '(740,-328)', '(762,-342)', '(767,-347)', '(768,-349)', '(769,-352)', '(769,-357)', '(769,-359)', '(768,-361)', '(768,-364)', '(766,-370)', '(765,-371)', '(764,-374)', '(763,-376)', '(761,-378)', '(760,-381)', '(758,-385)', '(752,-394)', '(747,-401)', '(742,-407)', '(735,-413)', '(724,-421)', '(719,-424)', '(718,-425)', '(717,-425)'], ['(18,430)', '(19,430)', '(19,429)', '(19,428)', '(19,427)', '(18,426)', '(17,426)', '(17,425)', '(17,424)', '(17,423)', '(17,422)', '(17,421)', '(17,420)', '(16,421)', '(14,420)', '(11,419)', '(9,417)', '(7,416)', '(4,414)', '(3,414)', '(2,412)', '(1,412)', '(-1,410)', '(-2,409)', '(-2,408)', '(-3,407)', '(-3,406)', '(-3,405)', '(-3,404)', '(-3,403)', '(-3,402)', '(-3,401)', '(-3,400)', '(-4,399)', '(-4,398)', '(-5,398)', '(-6,398)', '(-7,397)', '(-7,396)', '(-6,395)', '(-5,395)', '(-4,393)', '(-3,391)', '(6,384)', '(12,378)', '(24,370)', '(42,358)', '(107,304)', '(151,255)', '(207,196)', '(259,121)', '(389,-28)', '(456,-84)', '(515,-134)', '(569,-182)', '(650,-260)', '(688,-294)', '(723,-317)', '(740,-328)', '(762,-342)', '(767,-347)', '(768,-349)', '(769,-352)', '(769,-357)', '(769,-359)', '(768,-361)', '(768,-364)', '(766,-370)', '(765,-371)', '(764,-374)', '(763,-376)', '(761,-378)', '(760,-381)', '(758,-385)', '(752,-394)', '(747,-401)', '(742,-407)', '(735,-413)', '(724,-421)', '(719,-424)', '(718,-425)', '(717,-425)']

我們希望將所有這些值變成一個矩陣,我們可以在其中更新值。 列表中的所有這些值都將是矩陣的行和列的值嗎? 基本上:

row1 = '(18,430)', row2 = '(19,430)', row3 = '(19,429)',.....,rown='(717,-425)', column1 = '(18,430)', column2 = '(19,430)', column3 = '(19,429)', ..... ,columnn= '(717,-425)'

我們如何在 Python 中做到這一點,以后我想更新行和列中的值? 我嘗試在重復列表並將其制成矩陣的地方執行此操作。 但它並沒有給我想要的東西。

Res_List = [res,res]
print(np.array(Res_List))

所以我仍然想知道我們如何在 Python 中做到這一點。

我也試過:

mat = np.array([res,res]).T
print(mat)

它給了我我想要的東西,但並不完全。 這給了我:

[['(18,430)' '(18,430)']
 ['(19,430)' '(19,430)']
 ['(19,429)' '(19,429)']
 ['(19,428)' '(19,428)']
 ['(19,427)' '(19,427)']
 ['(18,426)' '(18,426)']
 ['(17,426)' '(17,426)']
 ['(17,425)' '(17,425)']
 ['(17,424)' '(17,424)']
 ['(17,423)' '(17,423)']
 ['(17,422)' '(17,422)']
 ['(17,421)' '(17,421)']
 ['(17,420)' '(17,420)']
 ['(16,421)' '(16,421)']
 ['(14,420)' '(14,420)']
 ['(11,419)' '(11,419)']
 ['(9,417)' '(9,417)']
 ['(7,416)' '(7,416)']
 ['(4,414)' '(4,414)']
 ['(3,414)' '(3,414)']
 ['(2,412)' '(2,412)']
 ['(1,412)' '(1,412)']
 ['(-1,410)' '(-1,410)']
 ['(-2,409)' '(-2,409)']
 ['(-2,408)' '(-2,408)']
 ['(-3,407)' '(-3,407)']
 ['(-3,406)' '(-3,406)']
 ['(-3,405)' '(-3,405)']
 ['(-3,404)' '(-3,404)']
 ['(-3,403)' '(-3,403)']
 ['(-3,402)' '(-3,402)']
 ['(-3,401)' '(-3,401)']
 ['(-3,400)' '(-3,400)']
 ['(-4,399)' '(-4,399)']
 ['(-4,398)' '(-4,398)']
 ['(-5,398)' '(-5,398)']
 ['(-6,398)' '(-6,398)']
 ['(-7,397)' '(-7,397)']
 ['(-7,396)' '(-7,396)']
 ['(-6,395)' '(-6,395)']
 ['(-5,395)' '(-5,395)']
 ['(-4,393)' '(-4,393)']
 ['(-3,391)' '(-3,391)']
 ['(6,384)' '(6,384)']
 ['(12,378)' '(12,378)']
 ['(24,370)' '(24,370)']
 ['(42,358)' '(42,358)']
 ['(107,304)' '(107,304)']
 ['(151,255)' '(151,255)']
 ['(207,196)' '(207,196)']
 ['(259,121)' '(259,121)']
 ['(389,-28)' '(389,-28)']
 ['(456,-84)' '(456,-84)']
 ['(515,-134)' '(515,-134)']
 ['(569,-182)' '(569,-182)']
 ['(650,-260)' '(650,-260)']
 ['(688,-294)' '(688,-294)']
 ['(723,-317)' '(723,-317)']
 ['(740,-328)' '(740,-328)']
 ['(762,-342)' '(762,-342)']
 ['(767,-347)' '(767,-347)']
 ['(768,-349)' '(768,-349)']
 ['(769,-352)' '(769,-352)']
 ['(769,-357)' '(769,-357)']
 ['(769,-359)' '(769,-359)']
 ['(768,-361)' '(768,-361)']
 ['(768,-364)' '(768,-364)']
 ['(766,-370)' '(766,-370)']
 ['(765,-371)' '(765,-371)']
 ['(764,-374)' '(764,-374)']
 ['(763,-376)' '(763,-376)']
 ['(761,-378)' '(761,-378)']
 ['(760,-381)' '(760,-381)']
 ['(758,-385)' '(758,-385)']
 ['(752,-394)' '(752,-394)']
 ['(747,-401)' '(747,-401)']
 ['(742,-407)' '(742,-407)']
 ['(735,-413)' '(735,-413)']
 ['(724,-421)' '(724,-421)']
 ['(719,-424)' '(719,-424)']
 ['(718,-425)' '(718,-425)']
 ['(717,-425)' '(717,-425)']]

但我想要的是列就像它們的設計方式一樣,但行與列相同,並且我們能夠更新並將值放入矩陣中。

您可以使用 Numpy。 要將列表轉換為類似數組的矩陣,您應該將其寫為列表(或元組)列表。 首先,您的列表包含字符串,因此我們首先將字符串轉換為元組,如下所示:

new_list = [eval(i) for i in res]

我使用 eval 是因為您的字符串是元組形式,所以我們可以告訴 python 將它們視為一段代碼。 然后讓我們將此 new_list 轉換為數組,如下所示:

import numpy as np
matrix = np.array(new_list )

現在您可以將矩陣元素作為 matrix[i, j] 訪問,其中 i, j 分別是行和列。 要更改特定位置的特定值,只需像往常一樣分配它:

matrix[i, j] = new_value

也許你想要的是一個dict

matrix = {
    k: {l: 0 for l in res}
    for k in res
}

所有值都初始化為 0。

您可以輕松更新matrix中的值; 例如,您可以將“單元格”的值增加一:

matrix['(18,430)']['(19,430)'] += 1

或將其設置為特定值:

matrix['(18,430)']['(19,430)'] = 10

並檢索它:

val = matrix['(18,430)']['(19,430)']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM