Python 如何求向量化矩阵numpy的指数

Python 如何求向量化矩阵numpy的指数,python,numpy,matrix,Python,Numpy,Matrix,我有一个以numpy(nxnnxn)表示的ndmatrix,我将其矢量化,以便以特定的方式对数据进行采样,得到(1xn^3) 我想将单个矢量化索引转换回形式为(nxnnxn)的n维索引。我不确定颠簸到底是如何将矩阵矢量化的 任何人都可以提供建议吗?Numpy有一个函数unravel_index,该函数的作用相当于:给定一组“平面”索引,它将返回每个维度中索引数组的元组: >>> indices = np.arange(25, dtype=int) >>> np

我有一个以numpy(nxnnxn)表示的ndmatrix,我将其矢量化,以便以特定的方式对数据进行采样,得到(1xn^3)

我想将单个矢量化索引转换回形式为(nxnnxn)的n维索引。我不确定颠簸到底是如何将矩阵矢量化的


任何人都可以提供建议吗?

Numpy有一个函数
unravel_index
,该函数的作用相当于:给定一组“平面”索引,它将返回每个维度中索引数组的元组:

>>> indices = np.arange(25, dtype=int)
>>> np.unravel_index(indices, (5, 5))
(array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4,
        4, 4], dtype=int64),
 array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2,
        3, 4], dtype=int64))
然后,您可以
zip
它们来获取原始索引

但是,请注意,矩阵可以表示为“行序列”(C约定,
'C'
)或“列序列”(Fortran约定,
'F'
),或更高维度的相应约定。numpy中矩阵的典型展平将保持该顺序,因此
[[1,2],[3,4]]
可以展平为
[1,2,3,4]
(如果它有'C'顺序)或
[1,3,2,4]
(如果它有'F'顺序)<如果要更改默认值(即“C”),则代码>展开索引采用可选的
顺序
参数,因此可以执行以下操作:

>>> # Typically, transposition will change the order for
>>> # efficiency reasons: no need to change the data !
>>> n = np.random.random((2, 2, 2)).transpose() 
>>> n.flags.f_contiguous
True
>>> n.flags.c_contiguous
False
>>> x, y, z = np.unravel_index([1,2,3,7], (2, 2, 2), order='F')

Numpy有一个函数
unlavel_index
,它的作用非常大:给定一组“平面”索引,它将返回每个维度中索引数组的元组:

>>> indices = np.arange(25, dtype=int)
>>> np.unravel_index(indices, (5, 5))
(array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4,
        4, 4], dtype=int64),
 array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2,
        3, 4], dtype=int64))
然后,您可以
zip
它们来获取原始索引

但是,请注意,矩阵可以表示为“行序列”(C约定,
'C'
)或“列序列”(Fortran约定,
'F'
),或更高维度的相应约定。numpy中矩阵的典型展平将保持该顺序,因此
[[1,2],[3,4]]
可以展平为
[1,2,3,4]
(如果它有'C'顺序)或
[1,3,2,4]
(如果它有'F'顺序)<如果要更改默认值(即“C”),则代码>展开索引采用可选的
顺序
参数,因此可以执行以下操作:

>>> # Typically, transposition will change the order for
>>> # efficiency reasons: no need to change the data !
>>> n = np.random.random((2, 2, 2)).transpose() 
>>> n.flags.f_contiguous
True
>>> n.flags.c_contiguous
False
>>> x, y, z = np.unravel_index([1,2,3,7], (2, 2, 2), order='F')

我认为这取决于
(1,n^3)
的输出存储方式,以恢复到所需的输出格式。是的,这是我的问题。我只是简单地使用nd.reforme对矩阵进行矢量化,但实际上我不确定它们的存储顺序。我认为这取决于存储
(1,n^3)
的输出以恢复到所需的输出格式的方式。是的,这是我的问题。我只是简单地使用nd.REFORMATE对矩阵进行矢量化,但实际上我不确定它们的存储顺序谢谢!在这过程中,我学到了一些关于C和Fortran约定的知识!非常感谢。在这过程中,我学到了一些关于C和Fortran约定的知识!