首页 > 解决方案 > 根据ndarray中的索引设置值的通用方法?

问题描述

我在下面写了这个,但对我来说它看起来很丑/笨拙。
有没有更好的方法来遍历所有元素,同时跟踪索引
(即跟踪我在哪个地址)并设置一个
作为索引函数的值?

如果我有更多维度,我可以想象这会变得更加丑陋。
应该有更好的方法来做到这一点。

import numpy as np

def f(i,j,k,l):
    return i + 2 * j+ 3 * k + 4 * l

A = np.zeros((3,4,7,8), dtype=int)

i1 = i2 = i3 = i4 = -1

i1 = -1
for r1 in A:
    i1 += 1

    i2 = -1
    for r2 in r1:
        i2 += 1

        i3 = -1
        for r3 in r2:

            i3 += 1

            i4 = -1
            for r4 in r3:
                i4 += 1

                v = f(i1, i2, i3, i4)

                print ("Setting value {0} at ({1}, {2}, {3}, {4})".format(v, i1, i2, i3, i4))

                A[i1, i2, i3, i4] = v

print(A)

标签: pythonpython-3.xnumpymultidimensional-array

解决方案


np.fromfunction

np.fromfunction(f,(3,4,7,8),dtype=int)

只要f是“numpy 感知”,它就可以工作,即可以处理数组参数。


推荐阅读