简体   繁体   中英

Update values in numpy array without tedious for loops

I have a few arrays with data like this:

a = np.random.rand(3,3)
b = np.random.rand(3,3)

Using for loops I construct larger matrix

L = np.zeros((9,9))
for i in range(9):
    for j in range(9):
        L[i,j] = f(a,b,i,j) # values of L depends on values of a and b

Later in my program I will change a and b and I want my L array to change too. So the logic of my program looks like this (in pseudo code)

Create a
Create b
while True:
    Create L using a and b
    Do the stuff
    Change a
    Change b

In my program the size of L is large (10^6 x 10^6 and larger). Constructing this L matrix again and again is tedious and slow process. Instead of doing for loops again and again I would like just to update values of L matrix according to changed values of a and b. The structure of L is the same each time, the only difference is values of cells. Something like this:

a[0,0] = 2
b[0,0] = 2
L[3,5] = 2*a[0,0]*b[0,0]
L[3,5]
# >>> 8

a[0,0] = 3
b[0,0] = 1

# do some magic here 
L[3,5]
>>> 6

Can something like this solve your problem ?

>>> a = 10
>>> b = 20
>>> def func():
        # fetch the values of a and b
...     return a+b
... 
>>> lis = [func]
>>> lis[0]
<function func at 0x109f70730>
>>> lis[0]()
30
>>> a = 20
>>> lis[0]()
40

Basically every time you fetch the value by calling a function that computes the latest value.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM