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)的值信息。编辑问题以显示-这是否澄清?