2024-05-08 04:42:00 发布
网友
我有一个Nx3矩阵
i j val . . . . . . . . .
我想从中构造一个矩阵,其中元素x_ij=val,例如位置值矩阵
[[ 0 0 3 ] [ 1 1 2 ] [ 0 1 4 ] [ 1 0 1 ] [ 2 0 5 ] [ 2 1 2 ]]
会产生矩阵
[[3 4] [1 2] [5 2]]
在numpy中,最简单/简洁的方法是什么?你知道吗
创建一个空数组并用索引值填充它
In [541]: x = np.array([[0, 0, 3], ...: [1, 1, 2], ...: [0, 1, 4], ...: [1, 0, 1], ...: [2, 0, 5], ...: [2, 1, 2]]) ...: In [543]: arr = np.zeros((3,2),int) In [544]: arr[x[:,0], x[:,1]] = x[:,2] In [545]: arr Out[545]: array([[3, 4], [1, 2], [5, 2]])
在本例中,定义了arr的所有元素,但即使有些元素保留为0,也可以这样做。如果存在重复项,并且希望对它们求和,那么coo方法很方便。如果x不完整,reshape建议将出现问题。你知道吗
arr
coo
x
reshape
一种方法是使用coo_matrix
coo_matrix
>>> data = np.array([[0, 0, 3], [1, 1, 2], [0, 1, 4], [1, 0, 1], [2, 0, 5], [2, 1, 2]]) >>> >>> from scipy import sparse >>> i, j, v = data.T >>> sparse.coo_matrix((v, (i, j)), (3, 2)).A array([[3, 4], [1, 2], [5, 2]])
注意,这将在缺失的位置创建0,如果索引出现多次,它们的值将被求和。你知道吗
0
在coldspeed的解决方案的帮助下,这应该会得到你想要的:
coldspeed
x[np.lexsort(np.fliplr(x).T)][:, -1].reshape(-1, x.shape[1] - 1)
创建一个空数组并用索引值填充它
在本例中,定义了
arr
的所有元素,但即使有些元素保留为0,也可以这样做。如果存在重复项,并且希望对它们求和,那么coo
方法很方便。如果x
不完整,reshape
建议将出现问题。你知道吗一种方法是使用
coo_matrix
注意,这将在缺失的位置创建
0
,如果索引出现多次,它们的值将被求和。你知道吗在
coldspeed
的解决方案的帮助下,这应该会得到你想要的:相关问题 更多 >
编程相关推荐