如何访问二维数组的元素?
Posted
技术标签:
【中文标题】如何访问二维数组的元素?【英文标题】:How to access the elements of a 2D array? 【发布时间】:2011-10-24 17:34:44 【问题描述】:我想了解如何处理二维数组的元素。
如果我有例如:
a= ( a11 a12 a13 ) and b = (b11 b12 b13)
a21 a22 a23 b21 b22 b23
我已经在 python 中定义了它们,例如:
a=[[1,1],[2,1],[3,1]]
b=[[1,2],[2,2],[3,2]]
我看到我不能引用a[1][1]
,而是引用a[1]
,这给了我[2,1]
的结果。
所以,我不明白如何访问这些数组的第二行?那将是a21, a22, a23, b21, b22, b23
?
我该怎么做才能将它们乘以c1 = a21*b21, c2 = a22*b22
等?
【问题讨论】:
最好现在就开始使用 numpy! 您在尝试评估a[1][1]
时是否遇到错误?结果是 1。你发现了什么?
这是一个二维数组。第一个索引访问矩阵中的行。第二个索引访问该列。所以 a[0][1] 表示第一行和第二列。矩阵是一个 2x2 网格。
【参考方案1】:
如果你有
a=[[1,1],[2,1],[3,1]]
b=[[1,2],[2,2],[3,2]]
然后
a[1][1]
可以正常工作。它像你想要的那样指向第二列,第二行。
我不确定你做错了什么。
要乘以第三列中的单元格,您可以这样做
c = [a[2][i] * b[2][i] for i in range(len(a[2]))]
这适用于任意数量的行。
编辑:第一个数字是列,第二个数字是行,具有您当前的布局。它们都从零开始编号。如果你想切换顺序,你可以这样做
a = zip(*a)
或者你可以这样创建它:
a=[[1, 2, 3], [1, 1, 1]]
【讨论】:
那是因为a[1]
只有两个项目。数组从零开始编号。 a[1]
是第 1 列,所以只有 a[1][0]
和 a[1][1]
。
哇!我对快速答案印象深刻。这也是我的错误,因为我将它从我遇到的一个更大的问题简化为这个 a,b 案例。而且确实 a[0][0], a[1][1] 有效,但是当我不断尝试 [1][2] 时,我得到了错误:Traceback (last last call last): File "如果你想用二维数组做很多计算,你应该使用 NumPy 数组而不是嵌套列表。
对于您的问题,您可以使用:zip(*a) 转置:
In [55]: a=[[1,1],[2,1],[3,1]]
In [56]: zip(*a)
Out[56]: [(1, 2, 3), (1, 1, 1)]
In [57]: zip(*a)[0]
Out[57]: (1, 2, 3)
【讨论】:
【参考方案3】:仔细查看您的数组有多少个括号。当函数返回带有额外括号的答案时,我遇到了一个示例,如下所示:
>>>approx
array([[[1192, 391]],
[[1191, 409]],
[[1209, 438]],
[[1191, 409]]])
这没有用
>>> approx[1,1]
IndexError: index 1 is out of bounds for axis 1 with size 1
这可以打开括号:
>>> approx[:,0]
array([[1192, 391],
[1191, 409],
[1209, 438],
[1191, 409]])
现在可以使用普通的元素访问表示法:
>>> approx[:,0][1,1]
409
【讨论】:
【参考方案4】:似乎在这里工作:
>>> a=[[1,1],[2,1],[3,1]]
>>> a
[[1, 1], [2, 1], [3, 1]]
>>> a[1]
[2, 1]
>>> a[1][0]
2
>>> a[1][1]
1
【讨论】:
【参考方案5】:如果你有这个:
a = [[1, 1], [2, 1],[3, 1]]
您可以使用以下命令轻松访问:
print(a[0][2])
a[0][1] = 7
print(a)
【讨论】:
【参考方案6】:a[1][1]
确实按预期工作。你的意思是 a11 作为第一行的第一个元素吗?因为那将是 [0][0]。
【讨论】:
以上是关于如何访问二维数组的元素?的主要内容,如果未能解决你的问题,请参考以下文章