Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2012 06:46:10

kate
От:
Зарегистрирован: 2012-03-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

Привет всем, ребят подскажите, как из одномерного массива(размерность у него всегда разная), сделать двумерный? просто у меня так получается, что до определенного момента удобнее работать с одномерным массивом, а потом использовать двумерный. Я прогуглила, но так и не поняла, может быть алгоритм какой есть? буду очень благодарна за любую помощь:)



Офлайн

#2 Март 22, 2012 07:00:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

kate
Привет всем, ребят подскажите, как из одномерного массива(размерность у него всегда разная), сделать двумерный? просто у меня так получается, что до определенного момента удобнее работать с одномерным массивом, а потом использовать двумерный. Я прогуглила, но так и не поняла, может быть алгоритм какой есть? буду очень благодарна за любую помощь:)
Предположим, есть список
l=[1,2,3,4,5,6,7,8,9]
можно считать его одномерным массивом.
Что вы хотите получить из него, ведь вариантов может быть очень много,
напрмер
l=[
[1,2,3],
[4,5,6],
[7,8,9]
]
или
l=[
[1,2,3,4,5],
[6,7,8,9, None]
]



Офлайн

#3 Март 22, 2012 07:01:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

Короче, зависит от задачи. Давайте конкретный пример.



Офлайн

#4 Март 22, 2012 10:12:38

mr-x
От:
Зарегистрирован: 2012-03-15
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

На мой ламерский взгляд можно воспользовать numpy. В нем можно менять размерность массива в любой момент. Хоть сколько мерный хоть какой длины по осям.

Пример вот отсюда: http://habrahabr.ru/post/121031/

>>> a.ravel() # делает массив плоским
array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.])
>>> a.shape = (6, 2)
>>> a.transpose()
array([[ 7., 9., 7., 7., 6., 3.],
[ 5., 3., 2., 8., 8., 2.]])



Офлайн

#5 Март 22, 2012 13:21:27

kate
От:
Зарегистрирован: 2012-03-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

FishHook
Короче, зависит от задачи. Давайте конкретный пример.
Ну вот к примеру у меня есть массив Q = , насколько я понимаю он одномерный, так? а мне нужно обратится к нему, как к двумерному:
def funk(Q):
x = len(Q)
y = len(Q[0])
Соответственно x оно считывает, при обращении к y возникает проблемма:
y = len(Q[0])
TypeError: object of type 'int' has no len()
Может я конечно, что-то не так делаю и что-то не так понимаю, так что прошу разъяснить мне:)



Офлайн

#6 Март 22, 2012 13:39:01

Yanzay
От:
Зарегистрирован: 2011-02-14
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

kate
Может я конечно, что-то не так делаю и что-то не так понимаю
скорее всего так и есть, можете описать задачу более полно? что это за функция и что она должна делать?



Офлайн

#7 Март 22, 2012 14:08:23

mr-x
От:
Зарегистрирован: 2012-03-15
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

Может так?
Q или Q



Офлайн

#8 Март 22, 2012 14:18:59

kate
От:
Зарегистрирован: 2012-03-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

Yanzay
kate
Может я конечно, что-то не так делаю и что-то не так понимаю
скорее всего так и есть, можете описать задачу более полно? что это за функция и что она должна делать?
Ну собственно сюда мне нужно передать массив вида Q = . Вызываю я эту функцию и ловлю ошибку про которую писала выше.
def funk(S):
x = len(S)
y = len(S[0])

result = [[0 for j in range(y)] for i in range(x)]

result[0][0] = S[0][0]

for i in range(1, x):
result[i][0] = S[i][0] + result[i - 1][0]

for i in range(1, y):
result[0][i] = S[0][i] + result[0][i - 1]

for i in range(1,x):
for j in range(1, y):
result[i][j] = S[i][j] + result[i - 1][j] + \
result[i][j - 1] + result[i - 1][j - 1]

return result



Офлайн

#9 Март 22, 2012 17:56:40

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

funk() чтото делает



Офлайн

#10 Март 22, 2012 18:21:20

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Из одномерного массива сделать двумерный

Раз уж тайна задачи остается за 7 замками то объясним хотяб ей что за ошибка )
Q - последовательность, итерируемый объект
число (такое как 5, 18 или 69) - не итерируемый объект

Так вот функция len над итерируемым объектом возвращает количество, если список то количество элементов, если строка то количество символов.

Вы же когда запрашиваете len(S) спрашиваете чему равна длина первого элемента списка, т.е. len(1) на что и получаете ошибку. А ведь действительно нельзя ж подсчитать длину числа.

В итоге вы либо говорите конкретную задачу которую вам нужно решить и получаете решение за пол часа, т.е. приводите пример двухмерного массива. Либо если вам нужен репетитор чтобы спрашивать а что в этой строчке не так, а что в этой, я думаю желающих по уменьшится :)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version