【发布时间】:2023-03-07 10:40:01
【问题描述】:
当我编写一个接受ndarray 或scalar 输入的函数时
def foo(a):
# does something to `a`
#
# a: `x` dimensional array or scalar
# . . .
cast(a, x)
# deal with `a` as if it is an `x`-d array after this
有没有一种有效的方式来编写cast 函数?基本上我想要的是一个可以转换的函数:
-
a,scalar到ndarray,形状为((1,)*x) -
b,ndarray和y<x显式调暗以塑造((1,) * (y-x) + b.shape)(与广播相同) -
c、ndarray和x不受影响 -
d、ndarray和y>xdims 会引发错误 - 就地执行所有操作(至少在从数组开始时),以防止双重内存
似乎这个功能在内置函数中经常重复,应该有一些快捷方式,但我没有找到它。
我可以先做 a_ = np.array(a, ndmin = x, copy = False) 然后 assert len(a_.shape) == x) ,但这仍然会复制数组。 (即a_.base is a 是False)。有没有办法解决?
【问题讨论】:
-
np.array采用copy参数。我们刚刚在astype中探索了该参数。像atleast_3d这样的函数使用asarray后跟一些newaxis整形。np.expand_dims也可能会给出想法。这些操作中的大多数都生成视图,而不是副本。只有x.shape=...“就地”改变形状。 -
np.asarray是np.array和copy=False。 -
@hpaulj
np.asarray不采用ndmin参数。不知何故,np.array(a, ndmin = x, copy = False)仍然为我复制了一个数组 -
复制为新 id 或新数据缓冲区指针?