【问题标题】:How can I assign slices of one structured Numpy array to another?如何将一个结构化 Numpy 数组的切片分配给另一个?
【发布时间】:2020-04-01 18:05:46
【问题描述】:

我有两个 numpy 结构化数组 arr1arr2
arr1 有字段['f1','f2','f3']
arr2 有字段['f1','f2','f3','f4']
即:

arr1 = [[f1_1_1,  f2_1_1,  f3_1_1 ],    arr2 = [[f1_2_1,  f2_2_1,  f3_2_1,  f4_2_1 ],
        [f1_1_2,  f2_1_2,  f3_1_2 ],            [f1_2_2,  f2_2_2,  f3_2_2,  f4_2_2 ],
        ...                        ,            ...                                 ,
        [f1_1_N1, f2_1_N1, f3_1_N1]]            [f1_2_N2, f2_2_N2, f3_2_N2, f4_2_N2]]

我想将arr1 的各个切片分配给arr2 的相应切片(索引和字段中的切片)。 各种情况见下文。

从我找到的答案(到相关,但不完全相同的问题)在我看来,唯一的方法是一次分配一个切片,用于单个字段,即,类似

arr2['f1'][0:1] = arr1['f1'][0:1]

(我可以确认这是可行的),循环切片中的所有源字段。

有没有办法一次分配切片中的所有预期源字段?


我的意思是分配图像中的元素x

案例1(仅arr1中的部分字段)

arr1 = [[  x   ,    x   ,  f3_1_1 ],    arr2 = [[  x   ,    x   ,  f3_2_1,  f4_2_1 ],
        [  x   ,    x   ,  f3_1_2 ],            [  x   ,    x   ,  f3_2_2,  f4_2_2 ],
        ...                        ,            ...                                 ,
        [f1_1_N1, f2_1_N1, f3_1_N1]]            [f1_2_N2, f2_2_N2, f3_2_N2, f4_2_N2]]

案例 2arr1 中的所有字段)

arr1 = [[  x   ,    x   ,    x    ],    arr2 = [[  x   ,    x   ,    x   ,  f4_2_1 ],
        [  x   ,    x   ,    x    ],            [  x   ,    x   ,    x   ,  f4_2_2 ],
        ...                        ,            ...                                 ,
        [f1_1_N1, f2_1_N1, f3_1_N1]]            [f1_2_N2, f2_2_N2, f3_2_N2, f4_2_N2]]

案例 3
arr1 有字段['f1','f2','f3','f5']
arr2 具有字段['f1','f2','f3','f4']
分配['f1','f2','f3']的切片


来源:

Python Numpy Structured Array (recarray) assigning values into slices

Convert a slice of a structured array to regular NumPy array in NumPy 1.14

【问题讨论】:

  • 多个字段索引在版本 1.16 周围发生了变化,因此早期的答案可能不适用。查看文档。
  • @hpaulj - 非常相关的信息,我会阅读的。同时,您认为这个问题的答案是“是”还是“不是”?

标签: arrays numpy slice structured-array


【解决方案1】:

例如,您可以这样做:

import numpy as np

x = np.array([('Rex', 9, 81.0), ('Fido', 3, 27.0)], dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
y = np.array([('Carl', 10, 75.0), ('Joe', 7, 76.0)], dtype=[('name2', 'U10'), ('age2', 'i4'), ('weight', 'f4')])

print(x[['name', 'age']])
print(y[['name2', 'age2']])

# multiple field indexing
y[['name2', 'age2']] = x[['name', 'age']]

print(y[['name2', 'age2']])

# you can also use slicing if you want specific parts or the size does not match
y[:1][['name2', 'age2']] = x[1:][['name', 'age']]

print(y[:][['name2', 'age2']])

名称字段名称可以不同,我不确定数据类型以及是否存在(向下)转换。

https://docs.scipy.org/doc/numpy/user/basics.rec.html#assignment-from-other-structured-arrays

https://docs.scipy.org/doc/numpy/user/basics.rec.html#accessing-multiple-fields

【讨论】:

  • [:] 不是必需的。您应该演示它如何与多字段索引一起使用。
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 2018-04-22
  • 2012-09-17
  • 1970-01-01
  • 2012-07-29
  • 2011-01-19
  • 2011-03-04
相关资源
最近更新 更多