如果要有效地评估多个参数的一维数组,即没有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):
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阵列?
答案 0 :(得分:2)
看看你的功能是什么
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])
的基本操作是构造一个前面有新维度的新数组,即形状(2, *arr1(shape))
。
还有其他组合数组的操作。 np.concatenate
及其变体hstack
,vstack
,dstack
,column_stack
,加入数组。 .reshape()
和[None,...]
,atleast_nd
等添加维度。查看stack
函数的代码,了解如何使用这些工具组合数组。
关于效率问题,我的时间测试显示连接操作通常比np.array
更快。通常np.array
会将其输入转换为列表,并重新分析值。这使得它在将阵列转换为特定dtypes方面具有更强大的功能,但却牺牲了时间。但我只担心大型阵列的建设时间很长。