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])}
添加回答
举报