【问题标题】:How to read every element of matrix by numpy then add to the separate matrix?如何通过numpy读取矩阵的每个元素然后添加到单独的矩阵中?
【发布时间】:2017-03-18 01:22:31
【问题描述】:

我在 Python3 中使用 numpy,我有 512X512 矩阵,我需要读取每个值并发送到函数 - 该函数将进行一些计算并将返回 3 个值 - 现在我需要添加这 3 个值在单独的矩阵中-顺便说一下,我的矩阵将是 512X512X512。

例如:主矩阵

 a=[1,2,3,4,5…23] [23,24,33,….23]…(512)….[11,22,33,44,55,…66]

我想提取每个元素(例如:1),然后在函数中计算并返回 3 个值 - 我们称返回值为:a1,a2,a3 然后我添加了单独的矩阵,如下所示:

 tempA=[a1,…] 
 tempB=[a2,…]
 tempC=[a3,…]

我如何在 Python 中使用 numpy 来做到这一点?

【问题讨论】:

  • 你有什么尝试吗?如果您提供任何尝试,社区将更快地参与进来
  • 看起来更像是生成一个 (512,512,3) 数组。功能有多普遍?它是否仅适用于标量输入(而不是 (512,512) 的一行?举一个小例子,有一个实际函数和一个较小的数组(例如 10x10)。
  • 你能详细说明这个函数的作用吗?根据其复杂性,您可以避免使用vectorize

标签: python numpy matrix


【解决方案1】:

由于我只是在How can I map python callable over numpy array in both elegant and efficient way? 中玩np.vectorize,所以我可以将其应用于您的案例:

In [462]: def foo(val):
     ...:     return val, val*2, val*3
     ...: 
In [463]: fv = np.vectorize(foo, otypes=[int,int,int])

foo 的 3 个返回值中的每一个都有一个 otypes 值。

In [464]: X = np.arange(12).reshape(3,4)
In [465]: X
Out[465]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

向量化函数返回一个数组元组,我们可以将其解包和/或重新组合成一个 3d 数组:

In [466]: tmp1, tmp2, tmp3 = fv(X)
In [467]: tmp1
Out[467]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [468]: tmp2
Out[468]: 
array([[ 0,  2,  4,  6],
       [ 8, 10, 12, 14],
       [16, 18, 20, 22]])
In [469]: tmp3
Out[469]: 
array([[ 0,  3,  6,  9],
       [12, 15, 18, 21],
       [24, 27, 30, 33]])
In [470]: np.array((tmp1,tmp2,tmp3))
Out[470]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[ 0,  2,  4,  6],
        [ 8, 10, 12, 14],
        [16, 18, 20, 22]],

       [[ 0,  3,  6,  9],
        [12, 15, 18, 21],
        [24, 27, 30, 33]]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多