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

Python:使用来自三元组的数据填充Numpy 2D数组

发布时间:2020-12-20 11:52:58 所属栏目:Python 来源:网络整理
导读:我在(x,y,value)三元组形式的数据库中有很多数据. 我希望能够通过在数组的坐标(x,y)处设置值,从该数据动态创建2d numpy数组. 例如,如果我有: (0,8)(0,1,5)(0,2,3)(1,4)(1,0)(1,0)(2,1)(2,2)(2,5) 结果数组应该是: Array([[8,5,3],[4,0],[1,5]]) 我是numpy
我在(x,y,value)三元组形式的数据库中有很多数据.
我希望能够通过在数组的坐标(x,y)处设置值,从该数据动态创建2d numpy数组.

例如,如果我有:

(0,8)
(0,1,5)
(0,2,3)
(1,4)
(1,0)
(1,0)
(2,1)
(2,2)
(2,5)

结果数组应该是:

Array([[8,5,3],[4,0],[1,5]])

我是numpy的新手,是否有任何方法在numpy这样做?如果没有,你会建议采取什么方法?

解决方法

从@MaxU扩展答案,如果坐标没有以网格方式排序(或者如果缺少某些坐标),您可以按如下方式创建数组:

import numpy as np

a = np.array([(0,8),(0,5),3),(1,4),0),(2,1),2),5)])

这里a代表你的坐标.它是一个(N,3)数组,其中N是坐标数(它不必包含所有坐标). a(a [:,0])的第一列包含Y位置,而第二列(a [:,1])包含X位置.同样,最后一列(a [:,2])包含您的值.

然后,您可以提取目标数组的最大尺寸:

# Maximum Y and X coordinates
ymax = a[:,0].max()
xmax = a[:,1].max()

# Target array
target = np.zeros((ymax+1,xmax+1),a.dtype)

最后,使用坐标中的数据填充数组:

target[a[:,a[:,1]] = a[:,2]

上面的行将[:,0](所有Y)和[:,1](所有X)位置的目标值设置为相应的[:,2]值(您的值).

>>> target
array([[8,5]])

此外,如果您缺少坐标,并且希望用某个数字替换这些缺失值,则可以将数组初始化为:

default_value = -1
target = np.full((ymax+1,default_value,a.type)

这样,列表中不存在的坐标将在目标数组中填充-1

(编辑:李大同)

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

    推荐文章
      热点阅读