2016-05-31 57 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个元素的数组,但你提供了一个元素的数组。我相信你的Scaler需要是一个标量(它将同样影响整个数组),或者是一个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