在python中从1D数组创建矩阵数组

在python中从1D数组创建矩阵数组,python,numpy,Python,Numpy,在python中,当元素被视为1D数组时,请帮助创建一个矩阵数组 例如: 这就是我要做的 import numpy as np ele_1 = np.linspace(0,1,num= 50) ele_2 = np.linspace(1,2,num= 50) ele_3 = np.linspace(2,3,num= 50) ele_4 = np.linspace(3,4,num= 50) Mat_array = np.array([[ele_1,ele_2],[ele_2,ele_4]])

在python中,当元素被视为1D数组时,请帮助创建一个矩阵数组

例如: 这就是我要做的

import numpy as np

ele_1 = np.linspace(0,1,num= 50)
ele_2 = np.linspace(1,2,num= 50)
ele_3 = np.linspace(2,3,num= 50)
ele_4 = np.linspace(3,4,num= 50)

Mat_array = np.array([[ele_1,ele_2],[ele_2,ele_4]]) #This is giving me (2, 2, 50) array


预期输出:

array([matrix_1,matrix_2,.....]
这里的
矩阵i
数组([[ele_1[i],ele_2[i]],[ele_3[i],ele_4[i]])
. 材料阵列必须是
(50,2,2,)
阵列

我想避免循环,这种方法也应该适用于任何nxn矩阵


谢谢你

我想这应该是你想要的,如果需要改变,请告诉我,很乐意帮助。此方法使用列表连接,不确定是否需要,但确实避免了for循环块

import numpy as np

n = 50

arr_1 = np.linspace(0,1,num=n)
arr_2 = np.linspace(1,2,num=n)
arr_3 = np.linspace(2,3,num=n)
arr_4 = np.linspace(3,4,num=n)

final_array = [[[arr_1[i],arr_2[i]],[arr_3[i],arr_4[i]]] for i in range(n)]

我认为这应该做你想要的,让我知道,如果它需要改变,高兴地帮助。此方法使用列表连接,不确定是否需要,但确实避免了for循环块

import numpy as np

n = 50

arr_1 = np.linspace(0,1,num=n)
arr_2 = np.linspace(1,2,num=n)
arr_3 = np.linspace(2,3,num=n)
arr_4 = np.linspace(3,4,num=n)

final_array = [[[arr_1[i],arr_2[i]],[arr_3[i],arr_4[i]]] for i in range(n)]
转置
可以将50放在第一位:

In [156]: Mat_array.transpose(2,0,1).shape                                              
Out[156]: (50, 2, 2)
In [157]: Mat_array = np.array([[ele_1,ele_2],[ele_3,ele_4]]).transpose(2,0,1)          
In [158]: timeit Mat_array = np.array([[ele_1,ele_2],[ele_3,ele_4]]).transpose(2,0,1)   
7.56 µs ± 51 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
在新的最后一个轴上使用
np.stack
的替代方法:

In [159]: res = np.stack([ele_1,ele_2,ele_3,ele_4],axis=1).reshape(-1,2,2)              
In [160]: np.allclose(res, Mat_array)                                                   
Out[160]: True
In [161]: timeit res = np.stack([ele_1,ele_2,ele_3,ele_4],axis=1).reshape(-1,2,2)       
16.9 µs ± 69.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
但速度较慢

速度较慢,尤其是在返回数组时。它迭代
n次
次:

In [162]: final_array = np.array([[[ele_1[i],ele_2[i]],[ele_3[i],ele_4[i]]] for i in ran
     ...: ge(n)])                                                                       
In [163]: np.allclose(final_array, Mat_array)                                           
Out[163]: True
In [164]: timeit final_array = np.array([[[ele_1[i],ele_2[i]],[ele_3[i],ele_4[i]]] for i
     ...:  in range(n)])                                                                
188 µs ± 373 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
转置
可以将50放在第一位:

In [156]: Mat_array.transpose(2,0,1).shape                                              
Out[156]: (50, 2, 2)
In [157]: Mat_array = np.array([[ele_1,ele_2],[ele_3,ele_4]]).transpose(2,0,1)          
In [158]: timeit Mat_array = np.array([[ele_1,ele_2],[ele_3,ele_4]]).transpose(2,0,1)   
7.56 µs ± 51 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
在新的最后一个轴上使用
np.stack
的替代方法:

In [159]: res = np.stack([ele_1,ele_2,ele_3,ele_4],axis=1).reshape(-1,2,2)              
In [160]: np.allclose(res, Mat_array)                                                   
Out[160]: True
In [161]: timeit res = np.stack([ele_1,ele_2,ele_3,ele_4],axis=1).reshape(-1,2,2)       
16.9 µs ± 69.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
但速度较慢

速度较慢,尤其是在返回数组时。它迭代
n次
次:

In [162]: final_array = np.array([[[ele_1[i],ele_2[i]],[ele_3[i],ele_4[i]]] for i in ran
     ...: ge(n)])                                                                       
In [163]: np.allclose(final_array, Mat_array)                                           
Out[163]: True
In [164]: timeit final_array = np.array([[[ele_1[i],ele_2[i]],[ele_3[i],ele_4[i]]] for i
     ...:  in range(n)])                                                                
188 µs ± 373 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

请正确格式化并再次提问。请正确格式化并再次提问。这是一个多么好的答案。我觉得这真的很有用。非常感谢S_Zizzle。非常好,速度非常快!非常感谢@S_Zizzle。多好的回答。我觉得这真的很有用。非常感谢S_Zizzle。非常好,速度非常快!非常感谢@S_Zizzle。回答得很好。正是我想要的。非常感谢@hpauljecellent的回答。正是我想要的。非常感谢@hpaulj