Python 将行-列值数据转换为数组-numpy

Python 将行-列值数据转换为数组-numpy,python,arrays,numpy,reshape,Python,Arrays,Numpy,Reshape,我有长格式的数据,存储行#、列#和值,如下所示: ROW COLUMN VALUE 1 1 1 1 3 3 2 1 1 2 2 2 3 1 1 3 2 2 3 3 3 请注意,缺少某些行、列组合(例如,行=1和列=2没有值)。我想把它转换成一个3x3的数组。缺少的行-列组合由0填充: 1

我有长格式的数据,存储行#、列#和值,如下所示:

ROW  COLUMN   VALUE
  1       1       1
  1       3       3
  2       1       1
  2       2       2
  3       1       1
  3       2       2
  3       3       3
请注意,缺少某些行、列组合(例如,行=1和列=2没有值)。我想把它转换成一个3x3的数组。缺少的行-列组合由0填充:

   1    0   3
   1    2   0
   1    2   3

我解决这个问题的最初方法是声明一个空的3x3数组,将三列读入为1d数组,循环行和列,并基于值数组更新数组。对于小维度的情况,这似乎是可行的,但对于更高维度,这似乎不是“Pythonic”的方法。这个问题在
numpy
软件包中的一些固定函数中解决了吗?我查看了
重塑
——但这假设没有丢失值。

一旦在numpy数组中有了行、列和值,就可以执行如下操作。(请注意,我采用了更具python风格的方法,将基于0的索引放入

以下是一维数组中的数据:

In [13]: row = np.array([0, 0, 1, 1, 2, 2, 2])

In [14]: col = np.array([0, 2, 0, 1, 0, 1, 2])

In [15]: values = np.array([11, 12, 13, 14, 15, 16, 17])
创建一个二维数组来保存这些值。我使用
中的最大值来计算数组应该有多大。如果
不一定包括最后一行或最后一列中的值,则可以使用其他一些值

In [16]: a = np.zeros((row.max()+1, col.max()+1), dtype=values.dtype)
现在用这个赋值填充这些值

In [17]: a[row, col] = values
等等:


你的例子是一个3x3数组,但是如果你实际上有更大的数组而不是很多条目,你可以考虑使用A。例如,您可以使用以下方法从上述相同数据创建“COO”矩阵:

[25]中的
:来自scipy.sparse导入coo_矩阵
在[26]中:c=coo_矩阵((值,(行,列)),形状=(行最大值+1,列最大值+1))
In[27]:c
出[27]:
在[28]中:c.A
出[28]:
数组([[11,0,12],
[13, 14,  0],
[15, 16, 17]])

在numpy数组中获得行、列和值后,可以执行以下操作。(请注意,我采用了更具python风格的方法,将基于0的索引放入

以下是一维数组中的数据:

In [13]: row = np.array([0, 0, 1, 1, 2, 2, 2])

In [14]: col = np.array([0, 2, 0, 1, 0, 1, 2])

In [15]: values = np.array([11, 12, 13, 14, 15, 16, 17])
创建一个二维数组来保存这些值。我使用
中的最大值来计算数组应该有多大。如果
不一定包括最后一行或最后一列中的值,则可以使用其他一些值

In [16]: a = np.zeros((row.max()+1, col.max()+1), dtype=values.dtype)
现在用这个赋值填充这些值

In [17]: a[row, col] = values
等等:


你的例子是一个3x3数组,但是如果你实际上有更大的数组而不是很多条目,你可以考虑使用A。例如,您可以使用以下方法从上述相同数据创建“COO”矩阵:

[25]中的
:来自scipy.sparse导入coo_矩阵
在[26]中:c=coo_矩阵((值,(行,列)),形状=(行最大值+1,列最大值+1))
In[27]:c
出[27]:
在[28]中:c.A
出[28]:
数组([[11,0,12],
[13, 14,  0],
[15, 16, 17]])

第1行第2列缺少什么?在数组中,长格式数据缺少索引(i,j)或(1,2)的值信息。要显示的编辑问题-这是否澄清了?第1行第2列中缺少了什么?在数组术语中,长格式数据中缺少索引(i,j)或(1,2)的值信息。编辑问题以显示-这是否澄清?