簡體   English   中英

Python - 將二維數組中的列設置為特定值的最佳方法

[英]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 = 2rows = 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_colset_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.

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