установка значений по нескольким индексам в массиве numpy - PullRequest
2 голосов
/ 01 августа 2020

У меня есть следующий фрагмент кода python:

import numpy as np


# Some random array
x = np.random.rand(34, 176, 256)
# Get some indexes
pos_idx = np.argwhere(x > 0.5)
# Sample some values from these indexes
seeds = pos_idx[np.random.choice(pos_idx.shape[0], size=5, replace=False), :]
# Now create another array
y = np.zeros_like(x, np.uint8)
y[seeds] = 1

В последней строке дается ошибка, например:

index 77 is out of bounds for axis 0 with size 34

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

Ответы [ 3 ]

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

Он рассматривает значения в семенах как индексы первого измерения. Чтобы получить доступ к элементам по их индексам в семенах, вы можете использовать:

y[seeds[:,0],seeds[:,1],seeds[:,2]] = 1
1 голос
/ 02 августа 2020

Этот код поможет вам установить значения на 1

import numpy as np

# Some random array
x = np.random.rand(34, 176, 256)
# Get some indexes
pos_idx = np.argwhere(x > 0.5)
# Sample some values from these indexes
seeds = pos_idx[np.random.choice(pos_idx.shape[0], size=5, replace=False), :]
# Now create another array
y = np.zeros_like(x, np.uint8)
for i in seeds:
    y[tuple(i)] = 1
0 голосов
/ 01 августа 2020

Семена имеют правильную форму? Если я правильно понял, x имеет случайные значения; y имеет ту же форму, что и x, но состоит только из нулей; и seeds - некоторые значения индекса, и эти местоположения будут установлены в единицу.

print('x    : ', x.ndim, x.shape)
print('y    : ', y.ndim, y.shape)
print('seeds: ', seeds.ndim, seeds.shape)

x    :  3 (34, 176, 256)
y    :  3 (34, 176, 256)
seeds:  2 (5, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...