gpt4 book ai didi

numpy - 如何有效地为多个参数准备矩阵(二维数组)?

转载 作者:行者123 更新时间:2023-12-02 01:36:14 25 4
gpt4 key购买 nike

如果您想有效地为多个参数评估一维数组,即没有 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 维数组,这通常可行吗?

最佳答案

看看你用你的函数得到了什么

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及其变体hstackvstackdstackcolumn_stack、join阵列。 .reshape()[None,...], atleast_nd 等添加维度。查看 stack 函数的代码,了解如何使用这些工具组合数组。

关于效率问题,我的时间测试表明连接操作通常比 np.array 快。通常 np.array 将其输入转换为列表,并重新解析值。这使它在将数组强制转换为特定数据类型方面具有更大的能力,但以时间为代价。但我只担心构建时间很长的大型阵列。

关于numpy - 如何有效地为多个参数准备矩阵(二维数组)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31143875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com