Python:迭代数组的行和列

时间:2014-04-03 15:23:52

标签: python arrays loops numpy multidimensional-array

我正在寻找一种简单有效的方法来按行和列迭代矩阵(2D数组)。使用Python。

我有3个相同大小的2D矩阵:一个包含x坐标,一个用于y坐标,另一个包含这些坐标处的某些数据(实际温度)的值。

我想迭代'data'矩阵的每个元素,但是通过跟踪当前行和列,因为我需要在'x'和'y'矩阵中查找等效值。

为了更清楚,我会在Matlab中编写它:

for i = 1:nb_line
    for j = 1:nb_column
        if data(i,j) ~= 0
            <operations using x[i,j] and y[i,j]>
        end
    end
end

在Python中,我正在考虑这样做:

for line in data:
    for elt in line:
        if not elt == 0:
            <operations>

我的问题是我在数组中忘记了我当前的位置,因此无法调用x [i,j]或y [i,j] ......

最简单的方法是什么? 提前谢谢。


编辑:我的代码现在看起来如下。

DATALATLON是netCDF4.variables,它们看起来像2-D蒙版数组,分别包含地理参数(温度,海拔,等等......) ,它的纬度和经度。

我想在常规纬度/经度网格上投影此数据(例如,如果空间步长dlon为0.5度,则我的数组的第一列对应于经度0deg,第二列经度为0.5度,第三个1.0deg等...)。

sizeLon     = (lonMax-lonMin)/dlon  
sizeLat     = (latMax-latMin)/dlat
Mp          = numpy.ma.masked_array(zeros((sizeLat,sizeLon)),mask=True)
for rows in zip(LST,LAT,LON):
    for lstVal, latVal,lonVal in zip(*rows):
        if lstVal is not numpy.ma.masked:
            lp  = round(-(latVal-latMin)/dlat)
            cp  = round((lonVal-lonMin)/dlon)
            Mp[lp,cp] = lstVal

2 个答案:

答案 0 :(得分:2)

使用enumerate功能。

例如,

>>> a = ['foo', 'bar', 'foorbar']
>>> for i, name in enumerate(a):
...     print 'item %d is %s' % (i, name)
... 
item 0 is foo
item 1 is bar
item 2 is foorbar

如果您实际上不需要ij值,而只需要另一个矩阵中的相应条目,您可能只想考虑zipping行:

>>> b = [[1, 2], [3, 4]]
>>> x = [['foo', 'bar'], ['barFoo', 'fooBar']]
>>> for rows in zip(b, x):
...     for bval, xval in zip(*rows):
...         print 'bval: %d; xval: %s' % (bval, xval)
... 
bval: 1; xval: foo
bval: 2; xval: bar
bval: 3; xval: barFoo
bval: 4; xval: fooBar

答案 1 :(得分:2)

听起来你正在寻找的内容可能是enumerate()provides you集合中值的索引{{3}}与值一起重复:< / p>

for i, line in enumerate(data): for j, elt in enumerate(line): if not elt == 0: <operations>

相关问题