4
根據文檔,ndarray.flat
是在陣列上進行迭代的迭代而ndarray.ravel
返回一個扁平陣列(如果可能)。所以我的問題是,我們應該什麼時候使用其中一個? 在下面的代碼中,哪一個會被優先考慮作爲賦值中的右值?numpy的拆紗與平在切片分配
import numpy as np
x = np.arange(2).reshape((2,1,1))
y = np.arange(3).reshape((1,3,1))
z = np.arange(5).reshape((1,1,5))
mask = np.random.choice([True, False], size=(2,3,5))
# netCDF4 module wants this kind of boolean indexing:
nc4slice = tuple(mask.any(axis=axis) for axis in ((1,2),(2,0),(0,1)))
indices = np.ix_(*nc4slice)
ncrds = 3
npnts = (np.broadcast(*indices)).size
points = np.empty((npnts, ncrds))
for i,crd in enumerate(np.broadcast_arrays(x,y,z)):
# Should we use ndarray.flat ...
points[:,i] = crd[indices].flat
# ... or ndarray.ravel():
points[:,i] = crd[indices].ravel()
我更新了示例代碼,以提供更接近起源問題的實際情況下的示例。我不明白「asarray」這一行。我知道結果是一樣的。其實我的問題是,在使用'flat'和使用'ravel'時,numpy在上面的代碼中做了些什麼(幕後)? – joanpau
這就是我說的,它會調用'np.asarray'(有效)幕後的右手邊,這意味着'arr.flat'被轉換爲一個數組反正。你使用哪一個仍然沒有關係。 – seberg
好了,我的最後一個問題應該是:假設'asarray'方法不執行任何操作時,輸入已經是一個數組,這是什麼'asarray'當輸入是一個迭代器呢? [Documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.asarray.html)沒有提到數組迭代器。 – joanpau