新的多维数组将数组中的值分配给第二个数组的索引

虽然我不觉得这过于复杂,但我正在努力寻找类似的问题/答案。


我有两个数组。


索引数组:[0, 1, 1, 0, 0, 1, 0]


值数组: [1, 2, 3, 4, 5, 6, 7]


我想使用第一个数组作为赋值索引和第二个数组作为值来创建一个新数组。这应该会产生一个新数组,每个索引有两个值,但是,一个值为零,另一个是我的第二个数组中的值。


使用我上面的示例数组,它应该导致:


[[1, 0],

 [0, 2],

 [0, 3],

 [4, 0],

 [5, 0],

 [0, 6],

 [7, 0]]

我可以使用以下方法轻松创建所需数组的空版本:np.zeros((total_len, values_per_index))


尝试以下操作时,我的直觉失败了:target_array[indices_array] = value_array


我相信我理解为什么我尝试的方法会失败,但如何真正实现这一点却让我望而却步。有没有一种简单的方法可以做到这一点?到目前为止,Python 不是我最好的语言,一些 numpy 技巧有时在本质上似乎过于神奇。


编辑:我知道一个 for 循环可以做到这一点,但我真的希望更好地理解 numpy 并在可能的情况下尽可能避免迭代,以实现代码的简洁性和可读性。


哈士奇WWW
浏览 77回答 4
4回答

炎炎设计

你可以这样做:import numpy as npindices = np.array([0, 1, 1, 0, 0, 1, 0])values = np.array([1, 2, 3, 4, 5, 6, 7])result = np.zeros((len(indices), 2))result[np.arange(len(indices)), indices] = valuesprint(result)输出[[1. 0.] [0. 2.] [0. 3.] [4. 0.] [5. 0.] [0. 6.] [7. 0.]]请参阅numpy 中的索引。

叮当猫咪

您可以使用如下乘法indices_array = np.array([0, 1, 1, 0, 0, 1, 0])value_array = np.array([1, 2, 3, 4, 5, 6, 7])## you can simply do thisvalue_array = np.c_[value_array * (indices_array==0), value_array * (indices_array==1)]display(value_array)

UYOU

您可以简单地使用column_stack和乘以 numpy 广播i_arr = np.array([0, 1, 1, 0, 0, 1, 0])v_arr = np.array([1, 2, 3, 4, 5, 6, 7])np.column_stack((1-i_arr, i_arr)) * v_arr[:,None]Out[61]:array([[1, 0],       [0, 2],       [0, 3],       [4, 0],       [5, 0],       [0, 6],       [7, 0]])

慕桂英546537

这对你有用吗?import numpy as np                                                                                                                                                                     a = np.array([0, 1, 1, 0, 0, 1, 0])                                                                                                                                                    b = np.array([1, 2, 3, 4, 5, 6, 7])                                                                                                                                                    print(np.array([a*b,(1-a)*b]))[[0 2 3 0 0 6 0][1 0 0 4 5 0 7]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python