Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 如何有效地为多个参数准备矩阵(二维数组)?_Numpy - Fatal编程技术网

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

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):

如果要有效地计算多个参数的一维数组(即不使用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阵列,这通常是可能的吗?

看看你的函数得到了什么

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
将其输入转换为列表,并重新解析值。这使它在将数组协调到特定的数据类型方面有了更大的能力,但这是以牺牲时间为代价的。但我只担心构建时间很长的大型阵列。

谢谢,我不知道转置的这种用法。