首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将引用的numpy数组更改为自身的切片?

如何将引用的numpy数组更改为自身的切片?
EN

Stack Overflow用户
提问于 2020-06-02 22:28:02
回答 4查看 180关注 0票数 1

考虑应用于两个numpy数组的以下操作和切片:

代码语言:javascript
复制
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行,我希望使用如下内容

代码语言:javascript
复制
In [4]: for data in [a,b] : 
   ...:     data[2:] = 0
   ...:     data = data[::2] 

我知道它不起作用,因为data = data[::2]的作用是让data指向一个新对象,而不是改变原来的对象。因此ab的值不会被切分:

代码语言:javascript
复制
In [5]: a                                                                                                
Out[5]: array([1, 2, 0, 0])

In [6]: b                                                                                                
Out[6]: array([5, 6, 0, 0])

我的问题是:

如何对变量引用的numpy数组进行切片?

在我的实际应用程序中,我在每个数组中执行几个操作,并希望将它们都放在for内的同一个块中。

EN

回答 4

Stack Overflow用户

发布于 2020-06-02 22:33:56

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

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
[1 0] [5 0]
票数 2
EN

Stack Overflow用户

发布于 2020-06-02 22:37:34

听起来你想要一本字典:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
{'a': array([1, 3]), 'b': array([5, 7])}
票数 1
EN

Stack Overflow用户

发布于 2020-06-02 22:40:11

您可以使用列表理解:

代码语言:javascript
复制
a,b = [arr[::2] for arr in [a,b]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62154321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档