【问题标题】:Get/Slice elements from numpy nested arrays从 numpy 嵌套数组中获取/切片元素
【发布时间】:2021-10-23 17:23:18
【问题描述】:

我正在处理结构类似这样的巨大嵌套数组:

import numpy as np


arr1 = np.array([[11, 12, 13],[21, 22, 23],[31, 32, 33]], dtype=complex)
arr2 = np.zeros([2, 2], dtype=object)

for i in range(2):
    for j in range(2):
        arr2[i,j] = arr1
        
arr2
array([[array([[11.+0.j, 12.+0.j, 13.+0.j],
               [21.+0.j, 22.+0.j, 23.+0.j],
               [31.+0.j, 32.+0.j, 33.+0.j]]),
        array([[11.+0.j, 12.+0.j, 13.+0.j],
               [21.+0.j, 22.+0.j, 23.+0.j],
               [31.+0.j, 32.+0.j, 33.+0.j]])],
       [array([[11.+0.j, 12.+0.j, 13.+0.j],
               [21.+0.j, 22.+0.j, 23.+0.j],
               [31.+0.j, 32.+0.j, 33.+0.j]]),
        array([[11.+0.j, 12.+0.j, 13.+0.j],
               [21.+0.j, 22.+0.j, 23.+0.j],
               [31.+0.j, 32.+0.j, 33.+0.j]])]], dtype=object)

现在我想创建另一个数组,它只保存每个子数组的 11 个值,而不使用循环。 我知道如何调用正确的项目。但是,我无法弄清楚如何使用每个子项获取整个切片。我想我可以使用这样的东西来获取外部数组的每个单元格,然后指定内部数组的索引:

arr2[0, 0][0, 0]
(11+0j) 

arr2[::][0, 0]
array([[11.+0.j, 12.+0.j, 13.+0.j],
       [21.+0.j, 22.+0.j, 23.+0.j],
       [31.+0.j, 32.+0.j, 33.+0.j]])

我希望用每个子数组中的 11 个元素创建类似这样的东西:

arr3 = array([[11+0j], [11+0j], [11+0j], [11+0j]])

我尝试了不同的方法,但无法达到我想要的输出。我究竟做错了什么? 提前致谢!

注意: 我在这里找不到任何现有的主题。 此外,这是我在这里的第一篇文章。如果我做错了什么,请告诉我,因为我很高兴在这里学习如何表现;)

【问题讨论】:

    标签: python numpy multidimensional-array indexing


    【解决方案1】:

    除非您 100% 知道自己在做什么,否则不要使用 dtype=object。作为初学者,这几乎总是错误的答案。

    你想要的是这个:

    >>> arr1 = np.array([[11, 12, 13],[21, 22, 23],[31, 32, 33]], dtype=complex)
    >>> arr2 = np.broadcast_to(arr1, (2, 2) + arr1.shape)
    >>> arr2
    array([[[[11.+0.j, 12.+0.j, 13.+0.j],
             [21.+0.j, 22.+0.j, 23.+0.j],
             [31.+0.j, 32.+0.j, 33.+0.j]],
    
            [[11.+0.j, 12.+0.j, 13.+0.j],
             [21.+0.j, 22.+0.j, 23.+0.j],
             [31.+0.j, 32.+0.j, 33.+0.j]]],
    
    
           [[[11.+0.j, 12.+0.j, 13.+0.j],
             [21.+0.j, 22.+0.j, 23.+0.j],
             [31.+0.j, 32.+0.j, 33.+0.j]],
    
            [[11.+0.j, 12.+0.j, 13.+0.j],
             [21.+0.j, 22.+0.j, 23.+0.j],
             [31.+0.j, 32.+0.j, 33.+0.j]]]])
    
    >>> arr2[:,:,0,0]
    array([[11.+0.j, 11.+0.j],
           [11.+0.j, 11.+0.j]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多