2016-05-31 4 views
1

Я использовал переменную масштабирования для масштабирования переменной дизайна, которая представляет собой массив. Тем не менее, я хочу масштабировать один из элементов по-другому от остальных. Но когда я входной массив в переменный скейлере, я получаю следующее сообщение об ошибке:Масштабирование отдельных элементов массива

File "/usr/local/lib/python2.7/site-packages/openmdao/core/problem.py", line 1642, in _calc_gradient_ln_solver 
Traceback (most recent call last): 
    J[item][param][:, i] *= in_scale[param] 
ValueError: non-broadcastable output operand with shape (1,) doesn't match the broadcast shape (48,) 

Можно ли добавить массив к скейлеру? Или есть лучший способ масштабировать отдельные элементы массива отдельно, а не делать это вручную?

ответ

1

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

Например, если foo представляет собой массив из 48 элементов.

scales = np.ones(48) 
scales[0] = 2.0 
driver.add_desvar('foo', lower=-10, upper=10, scaler=scales) 
+0

Да, это сработало. Это был 2D-массив формы (6,8), поэтому я передавал масштабируемому массиву того же размера. Но как только я сплющил его, то масштабирование сработало. Благодаря! – Ry10

Смежные вопросы