Python - 将二维数组中的列设置为特定值的最佳方法

时间:2010-02-05 12:56:33

标签: python multidimensional-array

我有一个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标准库

由于

5 个答案:

答案 0 :(得分:26)

NumPy包提供了强大的N维数组对象。如果datanumpy数组,那么将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]])

答案 1 :(得分:13)

更好的解决方案是:

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(感谢J.F. Sebastian):

for row in data:
    row[set_col] = val

答案 2 :(得分:0)

您使用的方式本身没有任何错误,除了因为您设置列而将变量set_col命名为set_row会更清楚。

因此设置了多个列,只需用另一个循环包装它:

for set_col in [...columns that have to be set...]

但有一个问题是:你的2D数组很不寻常,因为它包含在一维数组中(Python也可以通过列表列表支持2D数组),所以我会用方法或函数将它们全部包装起来。

答案 3 :(得分:0)

在你的情况下,行和列可能是可以互换的,也就是语义的问题。如果是这种情况,那么您可以使列占据data列表中的单元格序列,然后使用以下内容将它们归零:

  data[column_start:column_start+rows] = rows * [0]

答案 4 :(得分: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中。所以要设置colum 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