2015-05-30 4 views
1

10x10 arrayPython: Создание массива со значениями заполнения согласно столбца/строки

Предположим, что вы пытаетесь создать синтетический 10x10 изображения, представленного матрицей значений (NumPy массив). Это изображение имеет три заблокированных раздела. В верхнем левом блоке, столбцах 0-4 и строках 0-4, значение будет 1. правый блок, столбцы 5-9 и строки 0-9, будет 0. оставшаяся область, столбцы 0-4 и строка 5-9, будет 2. (см. Прилагаемое изображение)

Каков самый быстрый способ создания такого объекта? Я понимаю, что вы можете создать массив нулей и итеративно изменить значения в каждом столбце, но я также понимаю, что это не эффективный метод. Я предполагаю, что это связано с простое создание массива с помощью np.array, но я не совсем уверен в синтаксисе.

ответ

2

Моя первая мысль создать «пустой» массив 0, а затем заполнить блоки 1 и 2. Например.

In [145]: C = np.zeros((10,10), int) 

In [146]: C[:4,:4]=1 

In [147]: C[:4,5:9]=2 

In [148]: C 
Out[148]: 
array([[1, 1, 1, 1, 0, 2, 2, 2, 2, 0], 
     [1, 1, 1, 1, 0, 2, 2, 2, 2, 0], 
     [1, 1, 1, 1, 0, 2, 2, 2, 2, 0], 
     [1, 1, 1, 1, 0, 2, 2, 2, 2, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) 

Вы также могли бы сделать блоки (с np.ones и т.д.), и объединить их. hstack и vstack - это просто альтернативные API для конкатенации. Но concatenate заканчивается использованием в компилированном коде этого метода инициализации и присваивания. Это хорошая идея, чтобы быть знакомы с обоими методами.

+0

Отлично. Это тот метод, который я искал. Спасибо за вашу помощь –

1

Это вопрос домашней работы? Играйте с numpy.concatenate и numpy.ones и посмотрите, как вы идете.

+0

Нет, визуализация программы сегментации изображения. Я просто очень новичок в python. спасибо за ваше дополнение. –

1

насчет,

import numpy as np 

a = np.ones((5,5)) 
b = a*2. 
c = np.zeros((10,5)) 

np.hstack((np.vstack((a,b)),c)) 
+0

Я думал об этом, но я не был уверен, есть ли еще более компактный способ сделать это за один раз. Возможно, с np.arange? –