Numpy 如何有效地为多个参数准备矩阵(二维数组)?
如果要有效地计算多个参数的一维数组(即不使用for循环),可以执行以下操作:Numpy 如何有效地为多个参数准备矩阵(二维数组)?,numpy,Numpy,如果要有效地计算多个参数的一维数组(即不使用for循环),可以执行以下操作: x = array([1, 2, 3]) def gen_1d_arr(x): arr = array([2 + x, 2 - x,]) return arr gen_1d_arr(x).T 你会得到: array([[ 3, 1], [ 4, 0], [ 5, -1]]) 好的,但如何对二维阵列执行此操作,如下所示: def gen_2d_arr(x):
x = array([1, 2, 3])
def gen_1d_arr(x):
arr = array([2 + x, 2 - x,])
return arr
gen_1d_arr(x).T
你会得到:
array([[ 3, 1],
[ 4, 0],
[ 5, -1]])
好的,但如何对二维阵列执行此操作,如下所示:
def gen_2d_arr(x):
arr = array([[2 + x, 2 - x,],
[2 * x, 2 / x]])
return arr
你能得到这个吗
array([[[ 3. , 1. ],
[ 2. , 2. ]],
[[ 4. , 0. ],
[ 4. , 1. ]],
[[ 5. , -1. ],
[ 6. , 0.66666667]]])
另外,对于n-d阵列,这通常是可能的吗?看看你的函数得到了什么
In [274]: arr = np.array([[2 + x, 2 - x,],
[2 * x, 2 / x]])
In [275]: arr
Out[275]:
array([[[ 3. , 4. , 5. ],
[ 1. , 0. , -1. ]],
[[ 2. , 4. , 6. ],
[ 2. , 1. , 0.66666667]]])
In [276]: arr.shape
Out[276]: (2, 2, 3)
3
来自x
。中间的2
来自[2+x,2-x]
对,第一个2
来自外部列表
看起来您需要的是(3,2,2)数组。一个选项是对arr
应用转置或轴交换
arr.transpose([2,0,1])
np.array([arr1,arr2])
的基本操作是在前面构造一个具有新维度的新数组,即使用shape(2,*arr1(shape))
还有其他组合阵列的操作np.连接
及其变体hstack,vstack
,dstack
,列堆栈
,连接数组.reforme()
和[None,…]
,至少添加尺寸标注。查看堆栈
函数的代码,了解如何使用这些工具组合数组
关于效率问题,我的时间测试表明,串联操作通常比np.array
更快。通常,np.array
将其输入转换为列表,并重新解析值。这使它在将数组协调到特定的数据类型方面有了更大的能力,但这是以牺牲时间为代价的。但我只担心构建时间很长的大型阵列。谢谢,我不知道转置的这种用法。