[英]Python - best way to set a column in a 2d array to a specific value
我有一個2d數組,我想設置一個特定值的列,我的代碼如下。 這是python的最佳方式嗎?
rows = 5
cols = 10
data = (rows * cols) *[0]
val = 10
set_col = 5
for row in range(rows):
data[row * cols + set_col - 1] = val
如果我想將一些列設置為特定值,我該如何擴展它
我想只使用python標准庫
謝謝
NumPy包提供強大的N維數組對象。 如果data
是一個numpy
數組,那么將set_col
列設置為val
值:
data[:, set_col] = val
完整示例:
>>> import numpy as np
>>> a = np.arange(10)
>>> a.shape = (5,2)
>>> a
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> a[:,1] = -1
>>> a
array([[ 0, -1],
[ 2, -1],
[ 4, -1],
[ 6, -1],
[ 8, -1]])
更好的解決方案是:
data = [[0] * cols for i in range(rows)]
對於cols = 2
, rows = 3
的值,我們得到:
data = [[0, 0],
[0, 0],
[0, 0]]
然后你可以訪問它:
v = data[row][col]
這導致:
val = 10
set_col = 5
for row in range(rows):
data[row][set_col] = val
或者更多的Pythonic(感謝JF Sebastian):
for row in data:
row[set_col] = val
沒有什么內在的錯誤,你正在使用,但它會更清楚命名變量的方式set_col
比set_row
因為你設置的列。
所以設置一些列,只需用另一個循環包裝:
for set_col in [...columns that have to be set...]
但是有一個問題是:你的2D數組很不尋常,因為它包裝在一維數組中(Python也可以通過列表列表支持2D數組),所以我會用方法或函數將它們全部包裝起來。
在你的情況下,行和列可能是可以互換的,也就是語義的問題。 如果是這種情況,那么您可以使列占據data
列表中的單元序列,然后使用以下內容將它們歸零:
data[column_start:column_start+rows] = rows * [0]
較早的答案遺漏了range
,因此您可以嘗試以下方法:
cols = 7
rows = 8
data = [[0] * cols for i in range(rows)]
val = 10
set_col = 5
for row in data:
row[set_col] = val
要將它擴展到多個列,您可以將列號和它的值存儲在dict
。 因此要設置第5列到第10列以及第2列到第7列:
cols = 7
rows = 8
data = [[0] * cols for i in range(rows)]
valdict = {5:10, 2:7}
for col, val in valdict.items():
for row in data:
row[col] = val
如另一個答案中所建議的那樣,交換行和列會使這更簡單:
cols = 7
rows = 8
data = [[0] * rows for i in range(cols)]
valdict = {5:10, 2:7}
for col, val in valdict.items():
data[col] = [val] * rows
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.