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

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

如何將引用的 numpy 數組更改為自身的一部分?

如何將引用的 numpy 數組更改為自身的一部分?

絕地無雙 2022-12-20 16:13:24
考慮以下應用于兩個 numpy 數組的操作和切片:In [1]: import numpy as np                                                                               In [2]: a = np.array([1,2,3,4])                                                                          In [3]: b = np.array([5,6,7,8])                                                                          In [4]: a[2:] = 0                                                                                       In [5]: a = a[::2]                                                                                       In [6]: b[2:] = 0                                                                                       In [7]: b = b[::2]                                                                                       In [8]: a                                                                                                Out[8]: array([1, 0])In [9]: b                                                                                                Out[9]: array([5, 0])我不想重復切片代碼,例如,而不是上面的第 [4]-[7] 行,我希望使用類似In [4]: for data in [a,b] :    ...:     data[2:] = 0   ...:     data = data[::2] 我知道它不起作用,因為它的作用data = data[::2]是data指向一個新對象,而不是更改原始對象。所以 和 的值a沒有b被切片:In [5]: a                                                                                                Out[5]: array([1, 2, 0, 0])In [6]: b                                                                                                Out[6]: array([5, 6, 0, 0])我的問題是:如何切片變量引用的numpy數組?在我的實際應用程序中,我在每個數組中執行多個操作,并希望將它們全部放在for.
查看完整描述

4 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

您可以使用map映射所有變量的切片


import numpy as np                                                                               

a = np.array([1,2,3,4])                                                                          

b = np.array([5,6,7,8])


def func(x):

    x[2:] = 0

    x = x[::2] 

    return x

[a,b] = list(map(func,[a,b]))

print(a,b)

輸出:


[1 0] [5 0]


查看完整回答
反對 回復 2022-12-20
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

聽起來你想要一本字典:


import numpy as np


arrs = {'a': np.array([1,2,3,4]), 'b': np.array([5,6,7,8])}

arrs = {k: v[::2] for k, v in arrs.items()}

print(arrs)

輸出:


{'a': array([1, 3]), 'b': array([5, 7])}


查看完整回答
反對 回復 2022-12-20
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

您可以使用列表理解:

a,b = [arr[::2] for arr in [a,b]]


查看完整回答
反對 回復 2022-12-20
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

在創建數組對象和賦值時可能會有一些混淆。


讓我舉例說明:


定義兩個數組:


In [5]: a=np.arange(1,5); b=np.arange(5,10)                                     

列出這兩個數組:


In [6]: alist = [a,b]                                                           

和一個返回新數組的通用函數(它是一個視圖并不重要):


In [7]: def foo(i): 

   ...:     return i[2:] 

   ...:    

該函數可以應用于引用的數組a:


In [8]: foo(a)                                                                  

Out[8]: array([3, 4])

或引用的每個數組alist:


In [9]: [foo(i) for i in alist]                                                 

Out[9]: [array([3, 4]), array([7, 8, 9])]

這些數組可以解包為變量(新名稱或舊名稱):


In [10]: a,d = [foo(i) for i in alist]                                          

In [11]: a                                                                      

Out[11]: array([3, 4])          # the new sliced array

In [12]: b                                                                      

Out[12]: array([5, 6, 7, 8, 9])    # the original array

In [13]: d                                                                      

Out[13]: array([7, 8, 9])           # a slice of b

原始數組仍然存在于alist. 具有新值的事實a不會改變alist:


In [14]: alist                                                                  

Out[14]: [array([1, 2, 3, 4]), array([5, 6, 7, 8, 9])]

解包賦值 viamap做同樣的事情:


In [15]: d,e = map(foo, alist)                                                  

In [16]: d,e                                                                    

Out[16]: (array([3, 4]), array([7, 8, 9]))

制作切片數組的字典也有效:


In [17]: {key: foo(value) for key, value in zip(['e','d'],alist)}               

Out[17]: {'e': array([3, 4]), 'd': array([7, 8, 9])}


查看完整回答
反對 回復 2022-12-20
  • 4 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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