亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

新的多維數組將數組中的值分配給第二個數組的索引

新的多維數組將數組中的值分配給第二個數組的索引

哈士奇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 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號