【发布时间】:2021-01-14 23:07:33
【问题描述】:
我有一个函数 f,我想将它应用于任意形状和有序的 NumPy 数组 x 的所有元素。因为函数求值成本高,x 可能包含重复值,所以我首先将x 简化为唯一值,一个一维数组xu。
xu, ind = np.unique(x, return_inverse=True)
然后我为函数值创建一个数组
yu = np.full(len(xu), np.nan)
并通过应用 f elementwise 来填充此数组。
我现在想创建一个与x 形状相同的数组y,以便相应的条目包含函数的结果。我的尝试:
y = np.full(x.shape, np.nan)
y[ind] = yu
如果x 还不是一维的,这将失败。 (您可能会猜到我习惯了 Matlab,其中多维数组的线性索引起作用。)我需要的是 y 上的一维视图,我可以将 [ind] = 应用到,分配给正确的元素。
问题一:多维数组上是否有这样的一维视图?
或者,我可以将y 创建为一维,分配值,然后重塑。
y = np.full(x.size, np.nan)
y[ind] = yu
y = np.reshape(y, x.shape)
这似乎可行,但我不确定是否必须考虑x 的存储顺序。
问题2:np.unique返回的ind是否总是遵循np.reshape默认的'C'顺序,还是取决于x的内部结构?
【问题讨论】:
-
您的标题与实际问题无关。您可以删除有关应用该功能的整个部分,您的问题仍然是一样的。
-
我修正了答案中的错别字。
标签: python numpy numpy-ndarray