首页 > 解决方案 > 循环遍历一个numpy数组

问题描述

我有一个 5 x 10 数组,如果随机数大于 0.9,我想翻转一下。但是,这只适用于数组的第一行,它不会到达第二行和后续行。我用 3 和 4 替换了这些位,所以我可以很容易地看到是否发生翻转。我得到的结果看起来像这样。

[[3 1 1 1 4 1 3 1 0 1]
 [1 1 0 0 1 0 1 1 1 0]
 [1 0 1 0 1 0 1 1 1 1]
 [0 0 1 0 1 1 0 1 1 1]
 [0 1 1 0 0 0 0 1 1 1]]

请帮我弄清楚我错在哪里。


from random import random
RM =  np.random.randint(0,2, size=(5,10))
print(RM)
for k in range(0, RM.shape[0]):
    for j in range(0, RM.shape[1]):
        A  = random()
        if A > 0.9:
            if RM[k,j] == 0:
                np.put(RM, [k,j], [3]) 
                print("k1",k)
                print("j1", j)
            else:
                np.put(RM, [k,j], [4])  
                print("k2", k)
        else: 
            continue

print(RM)

标签: pythonarraysnumpy

解决方案


查看np.put的文档

numpy.put(a, ind, v, mode='raise')[source]
Replaces specified elements of an array with given values.

在示例下:

a = np.arange(5)
np.put(a, [0, 2], [-44, -55])
a
array([-44,   1, -55,   3,   4])

因此,如果您将列表提供给函数,它会替换展平数组中的多个值。

要使循环正常工作,只需将值分配给数组即可:

from random import random
RM =  np.random.randint(0,2, size=(5,10))
print(RM)
for k in range(0, RM.shape[0]):
    for j in range(0, RM.shape[1]):
        A  = random()
        if A > 0.9:
            if RM[k,j] == 0:
                RM[k,j]=3 
                print("k1",k)
                print("j1", j)
            else:
                RM[k,j] =4  
                print("k2", k)
        else: 
            continue

推荐阅读