编辑我在下面保留我的原始答案,但在相同主题上深入探讨您的上一个问题,请遵循您所遵循的内容。请注意,它不处理重复的值,因此如果将多个值分配给同一位置,则只会保留其中一个值。此外,这会弄乱散点图的规模,所以像我原来的答案可能更适合你的后续工作。但无论如何,下面的代码:
x_, x_idx = np.unique(np.ravel(dataX), return_inverse=True)
y_, y_idx = np.unique(np.ravel(dataY), return_inverse=True)
newArray = np.zeros((len(x_), len(y_)), dtype=dataMag.dtype)
newArray[x_idx, y_idx] = np.ravel(dataMag)
>>> newArray
array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0],
[ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0],
[ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0],
[ 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
原来的答案
如果dataX
和dataY
其中两个整数数组,实现起来是非常简单的。但是,因为它们似乎不一定是,所以您需要做一些舍入操作,为此您需要首先在每个方向上为阵列选择一个步长,然后可以执行下列操作:
from __future__ import division
x_step, y_step = 25, 0.10
x = np.round(dataX/x_step).astype(int)
y = np.round(dataY/y_step).astype(int)
x_m, x_M = np.min(x), np.max(x)
y_m, y_M = np.min(y), np.max(y)
newArray = np.zeros((x_M - x_m + 1, y_M - y_m + 1), dtype=dataMag.dtype)
newArray[x - x_m, y - y_m] = dataMag
>>> newArray
array([[ 22, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0],
[ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0],
[ 9, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 19, 0, 0, 0, 29, 0, 0, 0, 0, 0],
[ 5, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 26, 0, 0, 0, 14, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0],
[ 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 4, 0, 0, 0, 0, 16, 25, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
当你这样做时,你必须小心谨慎,确保你的舍入步骤足够小,以避免数组中的相同位置没有两个值,因为那样会丢失信息。例如:
x_step, y_step = 50, 0.10
...
>>> newArray
array([[ 22, 0, 0, 0, 9, 0, 0, 0, 777, 0, 0],
[ 9, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0],
[ 0, 19, 0, 0, 0, 29, 0, 0, 0, 0, 0],
[ 5, 0, 26, 0, 0, 0, 14, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9],
[ 0, 0, 0, 0, 0, 10, 0, 0, 13, 0, 0],
[ 0, 0, 0, 0, 0, 0, 16, 11, 0, 0, 0],
[ 0, 4, 0, 0, 0, 0, 0, 25, 0, 0, 0],
[ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0],
[ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
和[3, 2]
位置只有一个图26示出,而不是在前面的例子中的相应的细胞中的18和26向上。
你想要那个数组的结构是什么?你是说你想要一个1s的二维数组,哪里会有点和0点,哪里没有点,或什么? – BrenBarn
我不明白你想如何将这三个数组转换成单个二维数组,但你可以很容易地获得一个3d数组。考虑你的数组命名为'mag','x'和'y',那么'allthem = dstack((x.ravel(),y.ravel(),mag.ravel()))'和'scatter(x = allthem [...,0],y = allthem [...,1],c = allthem [...,2])'。 – mmgp
它将是一个数组,如'NewArray',每个轴'[i,j]'是来自'dataX'的有序点,'dataY'由来自'dataMag'的相应量值构成。 [这里](http://stackoverflow.com/questions/14085169/numpy-fast-re-map-3d-scatterplot-into-a-2d-array-given-the-xy-arrays)'视觉(也问由我无济于事)。 –