python – Numpy:将散点图转换为2D数组
发布时间:2020-12-20 13:32:22 所属栏目:Python 来源:网络整理
导读:说我有以下内容: import pyplot as pltimport numpy as np'''array([[29,13,11,4,5],#dataMag [19,16,25,9,10],[16,22,14,18,26],[ 9,17,8,777]])array([[205,338,380,428,228],#dataX [199,546,430,95,374],[418,85,260,236,241],[308,481,133,136,83]])ar
说我有以下内容:
import pyplot as plt import numpy as np '''array([[29,13,11,4,5],#dataMag [19,16,25,9,10],[16,22,14,18,26],[ 9,17,8,777]]) array([[205,338,380,428,228],#dataX [199,546,430,95,374],[418,85,260,236,241],[308,481,133,136,83]]) array([[ 0.48,0.83,0.71,0.12,0.],#dataY [ 0.09,0.,0.7,0.43,0.54],[ 0.58,0.56,0.18,0.25],[ 0.96,0.26,0.57,0.82])''' plt.scatter(x=dataX.flat,y=dataY.flat,c=dataMag.flat,vmin=np.min(dataMag),vmax=np.max(dataMag),marker='s',cmap='hot') plt.show() 这给了我以下结果: 而不是使用三个数组来获取2D图像,Numpy(或Scipy等)是否有办法将它们表示为(a,b)2D数组? 解决方法
编辑我在下面保留我原来的答案,但是深入研究你之前关于同一主题的问题,代码做了你以后的事情.请注意,它不处理重复值,因此如果您为同一位置分配了多个值,则只保留其中一个值.此外,这会扰乱散点图的比例,所以像我原来的答案这样的东西可能更适合你所追求的.但无论如何,这是代码:
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,777,0],[ 22,[ 0,[ 9,19,29,[ 5,26,9],10,[ 16,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]]) 在执行此操作时,您必须小心,确保您的舍入步骤足够小,以便没有两个值四舍五入到阵列中的相同位置,因为那样您将丢失信息.例如: x_step,y_step = 50,0.10 ... >>> newArray array([[ 22,0]]) 在位置[3,2]中,仅显示26,而不是前一示例的相应单元中的18和26. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |