LINUX.ORG.RU

доступ к элементу массиву произвольной вложенности

 ,


1

4

Например, shape — массив двух измерений, тогда:

data  = np.zeros(shape)
for i0 in range(shape[0]):
	for i1 in range(shape[1]):
		data[i0, i1] = None
Как организовать код что бы он работал с произвольным числом измерений? Ничего толкового на ум не приходит кроме хаков с eval.

★★★★★

Последнее исправление: thunar (всего исправлений: 1)

Твой код на случай произвольного числа измерений можно обобщить, например, так:

data  = np.zeros(shape)
slice_expression = [slice(None)] * len(shape)
data[slice_expression] = None

Скорее всего, тебе на самом деле нужно что-то другое, но других требований ты не привёл.

anonymous_coward
()

Приведи пример нормальный, че-то нифига не понятно из задачи

Siado ★★★★★
()

А чё,

data[:]=None

уже не работает?

yvv ★★☆
()
Ответ на: комментарий от Goury

Ну да, вот так получается, но не не нравится, что оно с обычным листом не будет работать:

def foo(xs):
	if len(xs.shape) > 1:
		for i in range(xs.shape[0]): foo(xs[i])
	else:
		for i in range(xs.shape[0]): xs[i]=None

thunar ★★★★★
() автор топика
Последнее исправление: thunar (всего исправлений: 2)

Варианта 2. Самый простой рекурсия. Сложнее стек.

dmxrand
()

Смысл нумпая теряется, если ты пишешь циклы вместо векторных операций.

anonymous
()
Ответ на: комментарий от WARNING

Не красиво и ограничено только numpy-массивами, т.е. для списка списков надо уже по другому писать условие выхода.

thunar ★★★★★
() автор топика
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от thunar

Какую *конкретно* проблему ты решаешь? Не исключено, что идиотские костыли, которые ты хочешь от неумения найти правильное представление для проблемы.

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

Чтение массива из бинарника, сгенерённого другой программой:

def read_dimension(xs, func):
	if len(xs.shape) > 1:
		for i in range(xs.shape[0]): read_dimension(xs[i], func)
	else:
		for i in range(xs.shape[0]): xs[i] = func()

#read stuff
dim     = st.unpack("i",f.read(4))[0]
shape = st.unpack("i"*dim,f.read(4*dim))
data    = np.zeros(shape)
read_dimension(data, lambda: st.unpack(_dtype,f.read(4))[0])

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

Массив из бинарника в numpy читается следующим образом:

a=numpy.fromfile(имя_файла, dtype=тип)

где «тип» задаёт размер записи. Вместо fromfile можно memmap использовать.

yvv ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.