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

2024-04-26 14:41:34 发布

您现在位置:Python中文网/ 问答频道 /正文

虽然我不觉得这太复杂,但我正在努力寻找类似的问题/答案。你知道吗

我有两个数组。你知道吗

索引数组:[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,并且在可能的情况下尽量避免迭代,以保持代码的整洁性和可读性。你知道吗


Tags: 方法答案版本numpy示例indexlennp
3条回答

你可以用下面的乘法

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)

你可以做:

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中的indexing。你知道吗

这对你有用吗?你知道吗

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

相关问题 更多 >