【问题标题】:Accessing an individual element in a Numpy array of arbitrary dimensions访问任意维度的 Numpy 数组中的单个元素
【发布时间】:2021-12-09 17:57:27
【问题描述】:

所以。我正在尝试访问和修改一系列 Numpy 数组的倒数第二个元素。

array_1D = np.array([10,11,12,13, 14])
array_2D = np.array([[20,30,40,50,60], [43,54,65,76,87], [11,22,33,44,55]])
array_3D = np.array([[[1,2,3,4,5], [11,21,31,41,51]], [[11,12,13,14,15], [51,52,53,54,5]]])
arrays = [array_1D, array_2D, array_3D]

我想通过编程而不是手动来完成这项工作,以便更深入地学习。

我拥有的是:

for array in arrays:
    print(array)  # Before
    print('CHANGE TEN')
    array[..., -2] = 10
    print(array, end='\n--------\n\n')  # After

返回:

[10 11 12 13 14]
CHANGE TEN
[10 11 12 10 14]
--------

[[20 30 40 50 60]
 [43 54 65 76 87]
 [11 22 33 44 55]]
CHANGE TEN
[[20 30 40 10 60]
 [43 54 65 10 87]
 [11 22 33 10 55]]
--------

[[[ 1  2  3  4  5]
  [11 21 31 41 51]]

 [[11 12 13 14 15]
  [51 52 53 54  5]]]
CHANGE TEN
[[[ 1  2  3 10  5]
  [11 21 31 10 51]]

 [[11 12 13 10 15]
  [51 52 53 10  5]]]
--------

如您所见,此语法当前访问沿主轴的所有元素的倒数第二个单个元素。

是否有一种简洁的方法可以访问任意维度数组的倒数第二个单个元素? (在这种情况下,这意味着一个整数。)

我知道奇怪的应用程序。我有兴趣了解与使用任意维度数组密切相关的限制。

(我用谷歌搜索了一下,没有用。谷歌福显然不强。)

【问题讨论】:

  • 搜索失败的原因是这不是一个常见的任务,甚至是一个罕见的任务。这是独一无二的。
  • penultimate individual element 有点模糊。您是否将阵列想象成一个平面的一维阵列? arr.ravel()[-2]?
  • @hpaulj 哦,太好了!好的,所以这不是我试图拼凑的各个部分的规定用途,这很令人欣慰。谢谢!关于我使用的术语,我的意思是对比数组的元素(用于数组各个“级别”的通用元素的术语)和单个元素(存储在任何给定“底部”的实际数据单元)路径”,它终止了可能的搜索深度。所以整数、浮点数、字符串等)。为混乱道歉。这不是这些元素的通用术语吗?如果不是,它们通常是如何被提及的?
  • @hpaulj 刚刚记得你问我是否将数组想象为一维数组。是的!这正是我的想法。
  • 刚刚检查了 .ravel() 上的文档。这正是我想要的。你是冠军。如果您想将其作为答案,我会将其标记为正确的解决方案

标签: python arrays numpy dimensions matrix-indexing


【解决方案1】:

给你:

array_1D = np.array([10,11,12,13, 14])
array_2D = np.array([[20,30,40,50,60], [43,54,65,76,87], [11,22,33,44,55]])
array_3D = np.array([[[1,2,3,4,5], [11,21,31,41,51]], [[11,12,13,14,15], [51,52,53,54,5]]])
arrays = [array_1D, array_2D, array_3D]

for array in arrays:
    print(array)  # Before
    print('CHANGE TEN')
    array[tuple([-2] * array.ndim)] = 10
    print(array, end='\n--------\n\n')  # After

print(array_1D[-2], array_2D[-2,-2], array_3D[-2,-2,-2])

输出:

10 10 10

【讨论】:

  • 感谢您的回答!然而,这实际上并没有产生我想要做的事情。这可能是由于练习的人为性质和我用来问它的语言不清楚:/所以请站在我这边。我正在寻找一种让以下语句产生 10 秒的方法。 print(array_1D[-2], array_2D[-1,-2], array_3D[-1,-1,-2]) 或者 print(array_1D[-2], array_2D[:,-2], array_3D[:, :,-2])
  • 但在这一点上,我想我已经有了答案。这是一件难以实现的事情,以至于我不需要实际功能的答案。我发布了这个问题,以了解是否有一种我根本不知道的相对已知的方法来做到这一点。我的结论是没有,因为它是另一个明智的结构良好的程序中不需要的功能,如果我发现自己需要这样的实现,我会在代码的其他地方寻找我的方法的其他更深层次的问题。你们真是太有帮助了,我真的很感激!
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多