加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读