考虑应用于两个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内的同一个块中。
发布于 2020-06-02 22:33:56
您可以使用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]发布于 2020-06-02 22:37:34
听起来你想要一本字典:
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])}发布于 2020-06-02 22:40:11
您可以使用列表理解:
a,b = [arr[::2] for arr in [a,b]]https://stackoverflow.com/questions/62154321
复制相似问题