首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy:切片2列

numpy:切片2列
EN

Stack Overflow用户
提问于 2019-12-25 21:03:12
回答 4查看 320关注 0票数 2

考虑以下数据:

61 1 1 15.04 14.96 13.17 13.17 13.67 13.67 10.25 10.83 12.58 18.50 15.04 1 2 14.88 10.83 6.50 12.62 7.67 11.04 9.79 9.67 17.54 13.83 1 3 18.88 12.33 10.13 6.17 10.17 8.04 8.50 7.67 12.75 12.71

前三栏分别是年、月和日。

其余12根柱子是当天一个国家12个地点的平均风速(以节为单位)。

我想要做的是丢失第2和第3列(索引1和2),以便获得以下数据:

61 15.04 14.96 13.17 13.29 13.96 13.67 10.25 10.83 12.58 18.50 15.04 16.88 10.88 6.62 7.67 11.04 10.79 9.67 17.54 13.58 13.88 12.33 12.13 11.17 6.17 11.25 8.04 8.50 7.67 12.75 12.71 8.50 7.67 12.71

以下的工作,但我不喜欢它,因为它不会规模,如果我有很多列(即许多地点)的数据。

代码语言:javascript
复制
import numpy as np
data = np.loadtxt('wind.data')
data_nomonth_noday = data[:,[0,3,4,5,6,7,8,9,10,11,12,13,14]]

是否可以在不枚举列号的情况下实现它?我能用切片来实现吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-25 21:21:37

您可以使用r_轻松地生成索引数组。

代码语言:javascript
复制
In [165]: np.r_[0,3:15]                                                                  
Out[165]: array([ 0,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

在被子底下,它只是在做

代码语言:javascript
复制
In [166]: np.concatenate([[0],np.arange(3,15)])                                          
Out[166]: array([ 0,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

np.delete虽然方便,但最终的工作量也是一样的。根据删除索引的不同,它将连接片段,或者构造选择掩码。

不管方法如何,结果都是一个新数组,包含所需数据的副本(而不是视图)。

loadtxt接受采用类似列索引数组的usecols参数。

票数 2
EN

Stack Overflow用户

发布于 2019-12-25 21:09:15

可以为此使用 [numpy-doc],并使用slice对象作为参数来删除:

代码语言:javascript
复制
>>> np.delete(data, slice(1, 3), 1)
array([[61.  , 15.04, 14.96, 13.17,  9.29, 13.96,  9.87, 13.67, 10.25,
        10.83, 12.58, 18.5 , 15.04],
       [61.  , 14.71, 16.88, 10.83,  6.5 , 12.62,  7.67, 11.5 , 10.04,
         9.79,  9.67, 17.54, 13.83],
       [61.  , 18.5 , 16.88, 12.33, 10.13, 11.17,  6.17, 11.25,  8.04,
         8.5 ,  7.67, 12.75, 12.71]])

当使用切片表示法时,遮罩下面基本上传递了一个slice对象。实际上,a[1:3]等同于a[slice(1,3)]

此外,这里的1指定了我们要删除的维度。由于我们希望删除第二个维度的数据,因此我们将1作为第三个参数。

票数 1
EN

Stack Overflow用户

发布于 2019-12-25 22:01:43

这应该是可行的:

代码语言:javascript
复制
import numpy as np
data = np.loadtxt('wind.data')
data_nomonth_noday = np.zeros((data.shape[0],data.shape[1]-2))
data_nomonth_noday[:,0] = data[:,0]
data_nomonth_noday[:,1:] = data[:,3:]

在我看来,这比其他一些可能的方法更易读、更灵活、更直观。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59481831

复制
相关文章

相似问题

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