4 回答

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]

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

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])}
添加回答
舉報