为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哈士奇WWW 2022-06-14 10:02:52
虽然我不觉得这过于复杂,但我正在努力寻找类似的问题/答案。我有两个数组。索引数组:[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 并在可能的情况下尽可能避免迭代,以实现代码的简洁性和可读性。
查看完整描述

4 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

你可以这样做:


import numpy as np


indices = 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] = values


print(result)

输出


[[1. 0.]

 [0. 2.]

 [0. 3.]

 [4. 0.]

 [5. 0.]

 [0. 6.]

 [7. 0.]]

请参阅numpy 中的索引。


查看完整回答
反对 回复 2022-06-14
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您可以使用如下乘法


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 this

value_array = np.c_[value_array * (indices_array==0), value_array * (indices_array==1)]

display(value_array)


查看完整回答
反对 回复 2022-06-14
?
UYOU

TA贡献1878条经验 获得超4个赞

您可以简单地使用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]])


查看完整回答
反对 回复 2022-06-14
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

这对你有用吗?


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]]


查看完整回答
反对 回复 2022-06-14
  • 4 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号