背景:
我正在使用的数据是从一个netCDF4
对象中提取的,该对象在初始化时创建了一个 numpy 掩码数组,但似乎不支持 numpyreshape()
方法,因此只能在复制所有数据后重新整形=方式太减缓。
问题:如何对一维数组(基本上是一个扁平的二维数组)进行二次采样,而不对其进行整形?
import numpy
a1 = np.array([[1,2,3,4],
[11,22,33,44],
[111,222,333,444],
[1111,2222,3333,4444],
[11111,22222,33333,44444]])
a2 = np.ravel(a1)
rows, cols = a1.shape
row1 = 1
row2 = 3
col1 = 1
col2 = 3
我想使用一种不需要将一维数组重塑为二维数组的快速切片方法。
期望的输出:
np.ravel(a1[row1:row2, col1:col2])
>> array([ 22, 33, 222, 333])
我得到了开始和结束位置,但这只是选择这些点之间的所有数据(即额外的列)。
idx_start = (row1 * cols) + col1
idx_end = (row2 * cols) + col2
更新:
我刚刚尝试了Jaime 的精彩回答,但似乎netCDF4
不允许二维索引。
z = dataset.variables["z"][idx]
File "netCDF4.pyx", line 2613, in netCDF4.Variable.__getitem__ (netCDF4.c:29583)
File "/usr/local/lib/python2.7/dist-packages/netCDF4_utils.py", line 141, in _StartCountStride
raise IndexError("Index cannot be multidimensional.")
IndexError: Index cannot be multidimensional.