Как добавить ndarray в список и получить доступ к каждому сохраненному ndarray из списка? - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь создать список, в котором хранятся все ndarrays, сгенерированные из моего цикла for:

for index in range(len(fishim)):
    cropped_fishim = []
    cropped_image = crop_img(fishim[index], labeled)#call function here.
    cropped_fishim.append(cropped_image)

Затем я хочу использовать cropped_fishim[index] для доступа к каждому сохраненному ndarray для дальнейшего процесса. Я также пытался использовать extend вместо append метода. Метод append упаковал все ndarray в один массив и не позволяет мне обращаться к каждому отдельному ndarray, хранящемуся в cropped_fishim. Метод расширения хранит ndarray отдельно, но cropped_fishim[index] будет обращаться только к массиву index th. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

append правильно; ваша проблема в строке выше:

for index in range(len(fishim)):
    cropped_fishim = []
    cropped_image = crop_img(fishim[index], labeled)#call function here.
    cropped_fishim.append(cropped_image)

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

Итак, в конце цикла у вас есть список, содержащий только одну вещь, последний массив изображений.

Чтобы это исправить, просто переместите присвоение перед циклом, чтобы вы делали это только один раз, а не снова и снова:

cropped_fishim = []
for index in range(len(fishim)):
    cropped_image = crop_img(fishim[index], labeled)#call function here.
    cropped_fishim.append(cropped_image)

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

Вам почти никогда не нужно - или вы не хотите - перебрать range(len(something)) в Python; Вы можете просто перебрать something:

cropped_fishim = []
for fishy in fishim:
    cropped_image = crop_img(fishy, labeled)#call function here.
    cropped_fishim.append(cropped_image)

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

cropped_fishim = [crop_img(fishy, labeled) for fishy in fishim]
0 голосов
/ 07 сентября 2018

Проблема решена. Спасибо!

легкий трюк выучен:

cropped_fishim = [None]*len(fishim)

for index in range(len(fishim)):
    cropped_image = crop_img(fishim[index], labeled)#call function here.
    cropped_fishim[index] = cropped_image
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...