4 python arrays numpy reference slice
假设我有一个函数需要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)
Run Code Online (Sandbox Code Playgroud)
我问,因为我听说在某些情况下有时会复制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
Run Code Online (Sandbox Code Playgroud)
注意OWNDATA : False- 它与A共享数据.
有关更多详细信息,请查看http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html.基本规则是它不会创建副本,除非您使用索引数组(例如A[[1,2,4]])或使用布尔数组(例如A[[True, False, True]])进行索引.几乎所有其他东西都返回一个没有副本的视图.
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |