【发布时间】:2021-11-26 02:33:31
【问题描述】:
简单案例-
我有两个数组:
x1 = np.arange(1,10) 和 x2 = np.array([0,0,4,0,0,5,0,0,0])
我想合并或组合这两个数组,以便x2 中的0 将替换为x1 中的值,而x2 的非零元素仍然存在。 NumPy.union1d 似乎做了这个联合。但我不想对其进行排序/排序。
然后
实际情况-
然后我想在多维数组上执行此操作,例如:x.shape=(xx,yy,zz)。两个数组对象将具有相同的形状。 x.shape = y.shape
这可能吗,还是我应该尝试使用屏蔽数组NumPy.ma?
---------------示例------------------- ----------
k_angle = khan(_angle)
e_angle = emss(_angle)
_angle.shape = (3647, 16)
e_angle.shape = (2394, 3647, 16)
k_angle.shape = (2394, 3647, 16)
_angle 包含 0 - 180 度的值列表,如果角度 khan 其他任何函数都是 emss 函数。
khan 的任何大于 5 的值都将变为 0。而emss 适用于所有值。
尝试 1: 我尝试拆分角度值,但重新组合它们被证明很棘手
khan = bm.Khans_beam_model(freq=f, theta=None)
emss = bm.emss_beam_model(f=f)
test = np.array([[0,1,2], [3,4,5], [6,7,8], [9,10,11]])
gt_idx = test > 5
le_idx = test <= 5
# then update the array
test[gt_idx] = khan(test[gt_idx])
test[le_idx] = emss(test[le_idx])
但这会出错TypeError: NumPy boolean array indexing assignment requires a 0 or 1-dimensional input, input has 2 dimensions
khan 和 emss 是“lambda”函数
所以我认为执行khan 和emss 然后在事后合并会更容易。
我应用了上面的简单案例来帮助解决这个问题。
【问题讨论】:
-
您能否发布您的代码努力并提供一个具有实际和预期结果的最小可重现示例?
-
@marcelh 做一个可重现的例子有点挑战,但我会尝试重做我的问题