Python: увеличение указателя / просмотр массива - PullRequest
0 голосов
/ 20 декабря 2018

Если бы я писал на C ++, я мог бы сделать следующее:

double foo [9] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; 
double* bar = foo;
cout << bar[0] << ", " << bar[1] << ", " << bar[2] << "\n";
bar += 3;
cout << bar[0] << ", " << bar[1] << ", " << bar[2] << "\n";
bar += 3;
cout << bar[0] << ", " << bar[1] << ", " << bar[2] << "\n";

Это напечатало бы:

0, 1, 2
3, 4, 5
6, 7, 8

Теперь я хочу сделать то же самое в numpy:

foo = np.arange((9))
bar = foo[:3]
print(bar)
???
print(bar)
???
print(bar)

Но я не знаю, что поставить на ??? Результат, надеюсь, будет:

[0 1 2]
[3 4 5]
[6 7 8]

Другими словами, я ищу способ изменить место, где видbar указывает на foo, используя существующую ссылку bar.

То есть я хотел бы иметь возможность записать ??? как bar = f(bar), где f - некоторая функция, определенная пользователем.


Редактировать:

Вот как я это делаю сейчас:

def f(idx=[0]): #mutable default argument
    idx[0] += 3
    return foo[idx[0]-3:idx[0]]
for key in key_list:
    a_dict[key] = f()
    b_dict[key] = f()

for view in range(num_views):
    a_list.append(f())
    b_list.append(f())

Он должен быть в векторе, потому что scipy.optimize.least_squares требует, чтобы все значения хранились в одном и том же векторе.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Питонический способ - это использовать Indedes:

foo = np.arange(9)
bar = np.arange(3)
print(foo[bar])
>> array([0, 1, 2])
bar += 3
print(foo[bar])
>> array([3, 4, 5])
bar += 3
print(foo[bar])
>> array([6, 7, 8])

Менее питонический способ (но более похожий на то, что вы кодируете) - использовать итератор:

foo = np.arange(9)
bar = foo.reshape(3,3).__iter__()   # or use bar = iter(foo.reshape(3,3))
bar.__next__()   # or use next(bar)
>> array([0, 1, 2])
bar.__next__()
>> array([3, 4, 5])
bar.__next__()
>> array([6, 7, 8])
0 голосов
/ 20 декабря 2018
foo = np.arange((9))
loopcounter = 3
startindex = 0
stopindex = startindex + loopcounter
print(foo[startindex:stopindex])
startindex = stopindex
stopindex = startindex + loopcounter
print(foo[startindex:stopindex])
startindex = stopindex
stopindex = startindex + loopcounter
print(foo[startindex:stopindex])

...

0 голосов
/ 20 декабря 2018
foo = np.arange(9)

bar = foo[:3]
print(bar)

bar = foo[3:6]
print(bar)

bar = foo[6:]
print(bar)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...