простой способ редактирования элементов в 2D массиве Python: - PullRequest
2 голосов
/ 03 августа 2020

Я хотел бы иметь возможность выполнять операции с определенными c элементами в 2D-массиве, если он соответствует критерию. в приведенном ниже примере код принимает любое значение <0,5 = 0. </p>

Кто-нибудь знает простой способ сделать это? Ниже мой код, но я уверен, что есть более простой способ.

import numpy as np

x = 5
y = 5

x3 = np.random.rand(x,y)

def choice(arr):
    row = -1
    column = -1
    for i in arr:
        row += 1
        for j in i:
            column += 1
            if j >= 0.5:
                arr[row,column] = j
            else:
                arr[row,column] = 0
                
            if column == y - 1:
                column = -1
    
    return arr

y3 = choice(x3.copy())

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Обнулить все индексы <0,5, </p>

>>> x3 = np.random.rand(5, 5)
>>> x3
array([[0.50866152, 0.56821455, 0.88531855, 0.36596337, 0.08705278],
       [0.96215686, 0.19553668, 0.15948972, 0.20486815, 0.74759719],
       [0.36269356, 0.54718917, 0.66196524, 0.82380099, 0.77739482],
       [0.0431448 , 0.47664036, 0.80188153, 0.8099637 , 0.65258638],
       [0.84862179, 0.22976325, 0.03508076, 0.72360136, 0.76835819]])
>>> x3[x3 < .5] = 0
>>> x3
array([[0.50866152, 0.56821455, 0.88531855, 0.        , 0.        ],
       [0.96215686, 0.        , 0.        , 0.        , 0.74759719],
       [0.        , 0.54718917, 0.66196524, 0.82380099, 0.77739482],
       [0.        , 0.        , 0.80188153, 0.8099637 , 0.65258638],
       [0.84862179, 0.        , 0.        , 0.72360136, 0.76835819]])
1 голос
/ 03 августа 2020

Просто для перечисления и введения тернарных условий вы можете сделать:

import numpy as np

x = 5
y = 5

x3 = np.random.rand(x,y)

def choice(arr):
    for row_idx, row in enumerate(arr):
        for col_idx, val in enumerate(row) :
            arr[row_idx,col_idx] = val if val >= 0.5 else 0
    return arr

y3 = choice(x3.copy())

Но решение AKX просто лучше.

...