Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在numpy结构数组中返回多列视图

如何在numpy结构数组中返回多列视图
EN

Stack Overflow用户
提问于 2013-03-03 04:13:14
回答 5查看 9.6K关注 0票数 27

通过使用字段名列表进行索引,我可以在numpy结构化数组中一次看到多个列(fields),例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

a = np.array([(1.5, 2.5, (1.0,2.0)), (3.,4.,(4.,5.)), (1.,3.,(2.,6.))],
        dtype=[('x',float), ('y',float), ('value',float,(2,2))])

print a[['x','y']]
#[(1.5, 2.5) (3.0, 4.0) (1.0, 3.0)]

print a[['x','y']].dtype
#[('x', '<f4') ('y', '<f4')])

但问题是,它似乎是一个副本,而不是一个视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b = a[['x','y']]
b[0] = (9.,9.)

print b
#[(9.0, 9.0) (3.0, 4.0) (1.0, 3.0)]

print a[['x','y']]
#[(1.5, 2.5) (3.0, 4.0) (1.0, 3.0)]

如果我只选择了一列,它就是一个视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
c = x['y']
c[0] = 99.

print c
#[ 99.  4.   3. ]

print a['y']
#[ 99.  4.   3. ]

有没有办法可以一次获得多个列的视图行为?

我有两种变通方法,一种是循环遍历列,另一种是创建一个分层的dtype,这样一列实际上会返回一个结构化数组,其中包含我想要的两个(或更多)字段。不幸的是,zip也会返回一个副本,所以我不能这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = a['x']; y = a['y']
z = zip(x,y)
z[0] = (9.,9.)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-02-17 01:36:27

您可以创建一个只包含所需字段的dtype对象,并使用numpy.ndarray()创建原始数组的视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
strc = np.zeros(3, dtype=[('x', int), ('y', float), ('z', int), ('t', "i8")])

def fields_view(arr, fields):
    dtype2 = np.dtype({name:arr.dtype.fields[name] for name in fields})
    return np.ndarray(arr.shape, dtype2, arr, 0, arr.strides)

v1 = fields_view(strc, ["x", "z"])
v1[0] = 10, 100

v2 = fields_view(strc, ["y", "z"])
v2[1:] = [(3.14, 7)]

v3 = fields_view(strc, ["x", "t"])

v3[1:] = [(1000, 2**16)]

print(strc)

下面是输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[(10, 0.0, 100, 0L) (1000, 3.14, 7, 65536L) (1000, 3.14, 7, 65536L)]
票数 35
EN

Stack Overflow用户

发布于 2016-08-26 04:32:06

基于@HYRY的答案,你也可以使用ndarray的方法getfield

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fields_view(array, fields):
    return array.getfield(numpy.dtype(
        {name: array.dtype.fields[name] for name in fields}
    ))
票数 11
EN

Stack Overflow用户

发布于 2017-03-20 09:35:26

从Numpy版本1.13开始,您提出的代码将返回一个视图。请参阅本页上的'NumPy 1.12.0发行说明->未来的变化->结构化数组的多字段操作‘:

https://docs.scipy.org/doc/numpy-dev/release.html

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

https://stackoverflow.com/questions/15182381

复制
相关文章
Numpy 结构数组
在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组。和C语言一样,在NumPy中也很容易对这种结构数组进行操作。
用户6021899
2019/08/14
8830
NumPy之:结构化数组详解
普通的数组就是数组中存放了同一类型的对象。而结构化数组是指数组中存放不同对象的格式。
用户2323866
2021/06/21
7300
NumPy之:结构化数组详解
普通的数组就是数组中存放了同一类型的对象。而结构化数组是指数组中存放不同对象的格式。
程序那些事
2021/05/11
1.1K0
NumPy之:结构化数组详解
普通的数组就是数组中存放了同一类型的对象。而结构化数组是指数组中存放不同对象的格式。
程序那些事
2021/05/06
1.2K0
详解 Numpy 中的视图和副本
在编程的过程中很可能会使用到原数组,这就涉及到视图和副本的概念,简单来说视图与副本是使用原数组的两种不同的方式。
触摸壹缕阳光
2020/08/25
1.1K0
详解 Numpy 中的视图和副本
Numpy中的数组维度
在对 np.arange(24)(0, 1, 2, 3, ..., 23) 进行重新的排列时,在多维数组的多个轴的方向上,先分配最后一个轴(对于二维数组,即先分配行的方向,对于三维数组即先分配平面的方向)
benym
2022/07/14
1.6K0
Python中numpy数组切片
Python中符合切片并且常用的有:列表,字符串,元组。 下面那列表来说明,其他的也是一样的。 格式:[开头:结束:步长] 开头:当步长>0时,不写默认0。当步长<0时,不写默认-1 结束:当步长>0时,不写默认列表长度加一。当步长<0时,不写默认负的列表长度减一 步长:默认1,>0 是从左往右走,<0是从右往左走 遵循左闭右开原则,如:[0:9]等价于数学中的[0,9)
狼啸风云
2020/12/18
3.3K0
Python中numpy数组切片
Numpy 修炼之道 (10)—— 结构化数组
之前我们操作Numpy的数组时,都是通过索引来操作的。针对二维数组,使用索引可以完成对行、列的操作。但是这是非常不直观的。可以把二维数组想象成一个excel表格,如果表格没有列名,操作起来会非常麻烦,针对这种情况,Numpy提供了结构化数组用来操作每列数据。
abs_zero
2018/04/11
1K0
numpy中数组的遍历技巧
在numpy中,当需要循环处理数组中的元素时,能用内置通函数实现的肯定首选通函数,只有当没有可用的通函数的情况下,再来手动进行遍历,遍历的方法有以下几种
生信修炼手册
2020/06/17
12.5K0
numpy中的掩码数组
numpy中有一个掩码数组的概念,需要通过子模块numpy.ma来创建,基本的创建方式如下
生信修炼手册
2020/06/10
1.9K0
Numpy数组
一、NumPy简介 NumPy是针对多维数组(Ndarray)的一个科学计算(各种运算)包,封装了多个可以用于数组间计算的函数。 数组是相同数据类型的元素按一定顺序排列的组合,注意必须是相同数据类型的,比如说全是整数、全是字符串等。 array([1,2,3]) # 数值型数组 array(['w','s','q'],dtype = '<U1') # 字符型数组 二、NumPy 数组的生成 要使用 NumPy,要先有符合NumPy数组的数据,不同的包
见贤思齊
2020/08/05
4.9K0
Numpy数组
Numpy 中 axis = n 对应 ndarray 的第 nnn 层 [],从最外层的 axis = 0,逐渐往内层递增。
hotarugali
2022/03/03
7900
Numpy数组
CSS——多列
多列属性可以将文本设计成像报纸杂志那种多列排版的布局,类似于Microsoft Word中的段落分栏功能。
Html5知典
2019/11/26
1.2K0
numpy中数组操作的相关函数
在numpy中,有一系列对数组进行操作的函数,在使用这些函数之前,必须先了解以下两个基本概念
生信修炼手册
2020/06/17
2.1K0
Python中numpy数组的拼接、合并
np.append() np.concatenate() np.stack() np.hstack() np.vstack() np.dstack() 其中最泛用的是第一个和第二个。第一个可读性好,比较灵活,但是占内存大。第二个则没有内存占用大的问题。
全栈程序员站长
2022/07/02
3.2K0
numpy创建数组
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。
全栈程序员站长
2022/06/26
1.6K0
numpy创建数组
SpringMVC返回数据到视图
在SpringMVC中有一个ModelAndView对象,如其名,Model代表模型,View代表视图,这个名字就很好地解释了该类的作用——它用来存储模型数据以及显示该数据的视图名称。在控制器中调用完模型层处理完用户的请求后,我们可以把结果数据存储在该对象的model属性中,把要返回的视图信息存储在该对象的view属性中,然后让把ModelAndView对象返回给SpringMVC框架。框架则会通过调用Spring配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据传递到指定的视图上,这样我们就可以在视图中获得结果数据并显示出来了。
端碗吹水
2020/09/23
1K0
SpringMVC返回数据到视图
numpy 数组操作
语法:numpy.arange([start, ] stop, [step, ]dtype=None)
foochane
2019/05/23
8500
Python Numpy 数组
NumPy(Numeric Python,以numpy导入)是一系列高效的、可并行的、执行高性能数值运算的函数的接口。numpy模块提供了一种新的Python数据结构——数组(array),以及特定于该结构的函数工具箱。该模块还支持随机数、数据聚合、线性代数和傅里叶变换等非常实用的数值计算工具。
smartsi
2019/08/07
2.4K0
numpy:数组比较
1、单条件 m=np.array([ [1,2,3], [10,20,30], [35,45,55] ]) n=(m==20) print(n) 输出 [[False False False] [False True False] [False False False]] col2=(m[:,1]==20) print(col2) 输出 [False True False] print(m[col2,:]) 输出true值的那一行数据 [[10 20 30]] 2、多条件 v
程裕强
2019/10/24
1.5K0

相似问题

结构化numpy数组中多列的Numpy.isin过滤

15

numpy结构化数组按多列排序

13

如何在numpy中返回数组列?

234

如何在多列上屏蔽numpy结构数组?

12

修改数组numpy中的多列

221
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文