Почему мои данные не маскируются?

1
data = [[0, 1, 1, 5, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6],
        [1, 1, 1, 0, 5, 5, 5, 0, 2, 2, 0, 0, 2, 0, 0, 6, 6, 6, 0, 0, 6, 6],
        [1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2, 6, 0, 0, 6, 6]]

У объекта данных, который у меня есть, есть <class 'numpy.ndarray'>

Знание данных - это numpy-объект, который я сделал:

data = np.array(data)

Я хочу установить числа внутри списка, который я даю в качестве значения 0, что я пытался:

data[~np.isin(data,[2,4])] = 0

я ожидаю, что все 2 и 4 вхождения в предыдущей матрице равны 0, а остальные сохранят свои значения, что я получил:

TypeError: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс

также попытался предоставить данные в виде массива numpy, в котором np.array дал ошибку.

Теги:
numpy
multidimensional-array

1 ответ

3
Лучший ответ

Вы не должны отрицать маску из проверки np.isin если вы намереваетесь установить эти совпадающие значения равными 0. Приведенный ниже код работает очень хорошо:

Кроме того, вы должны сделать data массив numpy вместо списка списков.

In [10]: data = np.array([[0, 1, 1, 5, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6],
    ...:         [1, 1, 1, 0, 5, 5, 5, 0, 2, 2, 0, 0, 2, 0, 0, 6, 6, 6, 0, 0, 6, 6],
    ...:         [1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2, 6, 0, 0, 6, 6]])
    ...:         

In [11]: data[np.isin(data, [2, 4])] = 0

In [12]: data
Out[12]: 
array([[0, 1, 1, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6],
       [1, 1, 1, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 6, 6],
       [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 6]])

Просто чтобы воспроизвести вашу ошибку:

In [13]: data = [[0, 1, 1, 5, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6],
    ...:         [1, 1, 1, 0, 5, 5, 5, 0, 2, 2, 0, 0, 2, 0, 0, 6, 6, 6, 0, 0, 6, 6],
    ...:         [1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 0, 0, 2, 6, 0, 0, 6, 6]]
    ...:         

In [14]: data[np.isin(data, [2, 4])] = 0
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-06ee1662f1f2> in <module>()
----> 1 data[np.isin(data, [2, 4])] = 0

TypeError: only integer scalar arrays can be converted to a scalar index
  • 0
    я только что проверил тип данных, это <class 'numpy.ndarray'> как в примере это переменная и функция других предыдущих вычислений, не просто жестко заданных как есть, это повлияет на ответ любым способом

Ещё вопросы

Сообщество Overcoder
Наверх
Меню