Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Python 如何用一个函数将多个numpy数组快速映射到不同对象的单个数组_Python_Arrays_Python 3.x_Numpy_Lambda - Fatal编程技术网

Python 如何用一个函数将多个numpy数组快速映射到不同对象的单个数组

Python 如何用一个函数将多个numpy数组快速映射到不同对象的单个数组,python,arrays,python-3.x,numpy,lambda,Python,Arrays,Python 3.x,Numpy,Lambda,假设我有4个numpy阵列,如: a : np.random.randn(4,4) 就像 array([[ 0.8087178 , -1.32970726, -0.62254544, 0.82266235], [-0.57101685, -1.39512136, -0.19650182, 0.46574661], [-1.06096896, 0.92744505, 1.98807088, 1.11976449], [-0.0103123 , 1.49460442,

假设我有4个numpy阵列,如:

a : np.random.randn(4,4)
就像

array([[ 0.8087178 , -1.32970726, -0.62254544,  0.82266235],
   [-0.57101685, -1.39512136, -0.19650182,  0.46574661],
   [-1.06096896,  0.92744505,  1.98807088,  1.11976449],
   [-0.0103123 ,  1.49460442, -0.16151632,  0.96951708]])
然后我有
b,c,d
也等于
np.random.randn(4,4)

现在,假设我想知道字符串中每个数组位置的最大值,如下所示:

 array([[a, b, d, c],
        [b, c, a, a],
        [c, a, b, b],
        [d, c, a, b]])
我该怎么做?lambda函数在这里似乎不起作用。我知道一个循环可以工作,但是有一个批处理函数可以做到这一点吗

更一般地说,问题是,在不使用循环的情况下,如何将单个函数应用于数组中的每个数组元素

谢谢

就这么简单:

np.argmax((a,b,c,d),axis=0)
这将为您提供一个数组,其中
0
表示
a
1
表示
b
,依此类推。 如果您真的在意,那么您可以将map
dict(zip(范围(4),'abcd'))
应用到它

对于“更一般”的问题,您将看到如下简单的
numpy.vectorize

np.argmax((a,b,c,d),axis=0)
这将为您提供一个数组,其中
0
表示
a
1
表示
b
,依此类推。 如果您真的在意,那么您可以将map
dict(zip(范围(4),'abcd'))
应用到它


对于“更一般”的问题,您要看的是
numpy.vectorize

对于您的主要问题:如果您使用
np.concatenate
将数组堆叠在一起,那么您可以使用
np.argmax
获得一个数组,该数组显示每个位置上哪个数组的元素最大。下面的示例显示了1D阵列的这一点。对于二维阵列,您需要轴=2

In [1]: import numpy as np

In [2]: a1 = np.array([1, 2, 3, 4])

In [3]: a2 = np.array([3, 2, 1, 1])

In [4]: a1
Out[4]: array([1, 2, 3, 4])

In [5]: a2
Out[5]: array([3, 2, 1, 1])

In [6]: np.concatenate([a1, a2])
Out[6]: array([1, 2, 3, 4, 3, 2, 1, 1])

In [7]: np.concatenate([[a1], [a2]])
Out[7]: 
array([[1, 2, 3, 4],
       [3, 2, 1, 1]])

In [9]: ai = np.concatenate([[a1], [a2]])

In [11]: np.argmax(ai, axis=1)
Out[11]: array([3, 0])

In [12]: np.argmax(ai, axis=0)
Out[12]: array([1, 0, 0, 0])

您的另一个问题“如何在不使用循环的情况下将单个函数应用于阵列中的每个阵列元素?”还不清楚。我不明白这是什么意思,但它可能应该是一个单独的问题。

对于你的主要问题:如果你使用
np.concatenate
将数组堆叠在一起,那么你可以使用
np.argmax
得到一个数组,显示哪个数组在每个位置具有最大的元素。下面的示例显示了1D阵列的这一点。对于二维阵列,您需要轴=2

In [1]: import numpy as np

In [2]: a1 = np.array([1, 2, 3, 4])

In [3]: a2 = np.array([3, 2, 1, 1])

In [4]: a1
Out[4]: array([1, 2, 3, 4])

In [5]: a2
Out[5]: array([3, 2, 1, 1])

In [6]: np.concatenate([a1, a2])
Out[6]: array([1, 2, 3, 4, 3, 2, 1, 1])

In [7]: np.concatenate([[a1], [a2]])
Out[7]: 
array([[1, 2, 3, 4],
       [3, 2, 1, 1]])

In [9]: ai = np.concatenate([[a1], [a2]])

In [11]: np.argmax(ai, axis=1)
Out[11]: array([3, 0])

In [12]: np.argmax(ai, axis=0)
Out[12]: array([1, 0, 0, 0])

您的另一个问题“如何在不使用循环的情况下将单个函数应用于阵列中的每个阵列元素?”还不清楚。我不明白它是什么意思,但它可能是一个单独的问题。

np.array(['a','b','c','d'])[np.argmax((a,b,c,d),axis=0)]
将返回OP所寻找的矩阵+1
np.array(['a','b','c','d'])[np.argmax((a,b,c,d),axis=0)]
将返回OP所寻找的矩阵+什么是“lambda函数”?什么是“lambda函数”?