是否存在转换以下n x 1矩阵的方法/代码,
x1
x2
x3
x4
x5
x6
x7
x8
x9
x10
等
进入形式的方阵,
x1 x2 x4 x7
x2 x3 x5 x8
x4 x5 x6 x9
x7 x8 x9 x10
等
我有一个903 x 1矩阵(以.csv格式),我希望将其转换为42 x 42矩阵,其格式如图所示。谢谢!
答案 0 :(得分:1)
我想我应该等到你编辑问题,但我继续看着这个数字。它看起来像一个基于三上和下三维矩阵的对称矩阵。什么dicispline被称为“完整矩阵”?
无论如何这里有一个产生你的形象的序列:
In [93]: idx=np.tril_indices(4)
In [94]: idx
Out[94]: (array([0, 1, 1, 2, 2, 2, 3, 3, 3, 3]), array([0, 0, 1, 0, 1, 2, 0, 1, 2, 3]))
In [95]: arr = np.zeros((4,4),int)
In [96]: arr[idx] = np.arange(1,11)
In [97]: arr
Out[97]:
array([[ 1, 0, 0, 0],
[ 2, 3, 0, 0],
[ 4, 5, 6, 0],
[ 7, 8, 9, 10]])
In [98]: arr1 = arr + arr.T
In [99]: arr1
Out[99]:
array([[ 2, 2, 4, 7],
[ 2, 6, 5, 8],
[ 4, 5, 12, 9],
[ 7, 8, 9, 20]])
In [100]: dx = np.diag_indices(4)
In [101]: dx
Out[101]: (array([0, 1, 2, 3]), array([0, 1, 2, 3]))
In [102]: arr1[dx] = arr[dx]
In [103]: arr1
Out[103]:
array([[ 1, 2, 4, 7],
[ 2, 3, 5, 8],
[ 4, 5, 6, 9],
[ 7, 8, 9, 10]])
这类似于scipy.spatial
为成对距离调用squareform
的内容。
In [106]: from scipy.spatial import distance
In [107]: distance.squareform(np.arange(1,11))
Out[107]:
array([[ 0, 1, 2, 3, 4],
[ 1, 0, 5, 6, 7],
[ 2, 5, 0, 8, 9],
[ 3, 6, 8, 0, 10],
[ 4, 7, 9, 10, 0]])
看来这个square_form
使用已编译的代码,所以我希望它比我的tril
基本代码快一点。但元素的顺序并不是你所期望的。
答案 1 :(得分:0)
Numpy有一个重塑阵列的功能 - https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
>>> np.reshape(a, (2, 3)) # C-like index ordering
array([[0, 1, 2],
[3, 4, 5]])