python - 从python中的一维数组创建矩阵数组
问题描述
当元素在python中被视为一维数组时,您能否帮助创建一个矩阵数组。
例如:这是我想要做的
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,.....]
这里matrix_i
是array([[ele_1[i],ele_2[i]],[ele_3[i],ele_4[i]]])
。Mat_array 必须是(50, 2, 2,)
数组
我想避免循环,这种方法也应该适用于任何适用的 nxn 矩阵。
谢谢
解决方案
In [153]: 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)
In [154]: Mat_array = np.array([[ele_1,ele_2],[ele_3,ele_4]]) # correction?
In [155]: Mat_array.shape
Out[155]: (2, 2, 50)
transpose
可以把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)
但它更慢。
S_Zizzle 的回答比较慢,尤其是在返回数组时。它迭代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)
推荐阅读
- rest - 需要帮助寻找生活成本相关数据的 api
- sql - FIND THE MINIMUM VALUE
- oauth-2.0 - How to disable device flow and implicit flow in identity server?
- scala - 在 Scala 中将 Map[String, String]() 附加到具有 [String] 类型的数组或列表中
- javascript - 使用 Cytoscape.js API 对有向树边缘进行分类的最简单方法是什么?
- python - python如何评估A
我看到的代码是这样的。
def min(x,y,z): if z<=x<=y: return z elif x<=y and x<z: return x elif y<=z and y<=x: return y
他们问以下是否
z<=x<=y
- r - Delete last row Data Table
- adobe-xd - 如何通过在 adobe XD 中滚动将下拉菜单修复为固定位置?
- multithreading - Is it better to use a thread or coroutine in Kotlin?
- laravel - How to Apply IF Where Condition in Laravel Collation