我正在处理来自 netcdf 文件的数据,带有多维变量,读入 numpy 数组。我需要扫描所有维度的所有值(numpy 中的轴)并更改一些值。但是,我事先并不知道任何给定变量的维度。在运行时,我当然可以获取 numpy 数组的 ndim 和形状。 我如何在事先不知道维数或形状的情况下对所有值进行循环编程?如果我知道一个变量恰好是二维的,我会做
shp=myarray.shape
for i in range(shp[0]):
for j in range(shp[1]):
do_something(myarray[i][j])
最佳答案
您应该查看 ravel
、nditer
和 ndindex
。
# For the simple case
for value in np.nditer(a):
do_something_with(value)
# This is similar to above
for value in a.ravel():
do_something_with(value)
# Or if you need the index
for idx in np.ndindex(a.shape):
a[idx] = do_something_with(a[idx])
顺便说一句,numpy 数组的索引是 a[i, j]
而不是 a[i][j]
。在python中a[i, j]
相当于用一个元组进行索引,即a[(i, j)]
。
关于python - 在事先不知道 ndim 时处理多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690429/