【问题标题】:get value from tensor by using index array python使用索引数组python从张量中获取值
【发布时间】:2022-10-19 00:49:04
【问题描述】:

我有一个数组 A :

A = [[1,  2  ,3  ,4],
     [5,  6  ,7  ,8],
     [9, 10 ,11 ,12],]

我想获得第三个元素中的第二行(即'7'):

我可以这样做:

A[1,2]

对于一般尺寸编号,我想要一些通用的东西。 给定索引列表 B=[1,2] 我想要像 MATLAB 索引这样的东西:

A[B] 或 A[*B]

第一个给出 2 行,第二个导致错误。 我怎样才能做到这一点?


编辑:类型(A)=类型(B)=np.array

【问题讨论】:

  • 我们谈论标准的 Python 3 列表吗?因为 A[1, 2] 和 A[[1, 2]] 都是非法的,会导致TypeError: list indices must be integers or slices, not tuple 错误。还是例如numpy的数组?
  • np.array。谢谢你的注意。我会在问题中澄清
  • 我找到了这个(丑陋的)解决方案: B = tuple( np.reshape(B,(1, len(B)))) 而不是: A(B) 希望有更好的解决方案

标签: python indexing numpy-ndarray


【解决方案1】:

您不需要使用“*”解包集合,因为 numpy 支持元组索引。您的问题是按列表索引和按元组索引之间存在差异。所以,

import numpy as np

A = np.array([
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9, 10, 11, 12]
])

print("indexing by list:
", A[[0, 1]], '
')
# Output:
# indexing by list:
#   [[1 2 3 4]
#   [5 6 7 8]] 

print("indexing by tuple:
", A[(0, 1)])
# Output:
# indexing by tuple:
#   2

希望能帮助到你。 For the further reading 关于 numpy 索引。

【讨论】:

    【解决方案2】:

    作为替代方案,假设您对“array indexing”感兴趣,即获取长度为L 的值数组,其中数组中的每个值都来自A 中的位置。您想通过某种索引来指示这些位置。

    假设AN 维。数组索引通过让您传递长度为LN 列表的元组来解决这个问题。 ith 列表给出了与A 中的ith 维度相对应的索引。在最简单的情况下,索引列表的长度可以是一(L=1):

    >>> A[[1], [2]]
    array([7])
    

    但索引列表可能更长(L=5):

    >>> A[[1,1,1,1,0], [2,2,2,2,0]]
    array([7, 7, 7, 7, 1])
    

    我强调这是一个列表元组;你也可以去:

    >>> first_axis, second_axis = [1,1,1,1,0], [2,2,2,2,0]
    >>> A[(first_axis,second_axis)]
    array([7, 7, 7, 7, 1])
    

    您还可以传递非元组序列(列表列表而不是列表元组)A[[first_axis,second_axis]],但在 NumPy 版本 1.21.2 中,给出了 FutureWarning,并指出已弃用。

    另一个例子:https://stackoverflow.com/a/23435869/4901005

    【讨论】:

    • 感谢您对几个输出的扩展。问题仍然存在。你能像这样索引它吗:A[(first_axis,second_axis)] and first_axis, second_axis = [1,1,1,1,0], [2,2,2,2,0]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多