gpt4 book ai didi

python - 在不创建昂贵副本的情况下引用 numpy 数组

转载 作者:太空狗 更新时间:2023-10-30 02:29:54 26 4
gpt4 key购买 nike

假设我有一个函数需要 NumPy ndarray 有 2 个轴,例如,行和列的数据矩阵。如果从这样的数组中切出一个“列”,这个函数也应该可以工作,因此为了方便起见,它应该做一些内部X[:, np.newaxis]。但是,我不想为此创建一个新的数组对象,因为在某些情况下这可能会很昂贵。

请问有什么好的方法吗?例如,以下代码是否安全(我的意思是,全局数组始终 是否会像 Python list 一样保持不变)?

X1 = np.array([[1,2,3], [4,5,6], [7,8,9]])
X2 = np.array([1,4,7])

def some_func(X):
if len(X.shape) == 1:
X = X[:, np.newaxis]
return X[:,0].sum()

some_func(X2)
some_func(X1[:, 0])
some_func(X1)

我问这个问题是因为我听说在某些情况下有时会复制 NumPy 数组,但是,我找不到这方面的好资源。有任何想法吗?

最佳答案

它不应该创建副本。例如:

>>> A = np.ones((50000000,))
>>> B = A[:,np.newaxis]
>>> B.flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False

注意 OWNDATA : False - 它正在与 A 共享数据。

有关更多详细信息,请查看 http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html .基本规则是它不会创建副本,除非您使用索引数组(例如 A[[1,2,4]])或 bool 数组(例如 A[[True, False, True]])。几乎所有其他内容都返回一个没有副本的 View 。

关于python - 在不创建昂贵副本的情况下引用 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30200494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com