问题标签 [advanced-indexing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 这个 numpy 高级索引代码如何工作?
我正在学习numpy框架。这段代码我看不懂。
该b
数组返回数组的角值a
,即b
equals [[0,2],[9,11]]
。
arrays - 使用 Python 中的高级索引进行 nd 数组收缩的简单方法
我知道必须有一种优雅的方式来使用高级索引来做到这一点,我只是想不通。
假设我有 (2,3,4) 数组
和 (4,) 数组y = array([1,0,1,1])
获得 (3,4) 数组的最优雅方法是什么
生产?
python - Python:Numpy 切片不一起比较/广播。[x:y] vs [0:yx] 声称不同的维度
我正在比较同一数组的两个切片。这两个切片是相同的,只是它们在 [1] 轴上偏移。我比较这两个切片并在 while 循环中重复返回它们的最小值。
我的期望:数组的大小相对于彼此保持不变,按“偏移量”的值缩小
相反会发生什么:在第二次迭代中,其中一个数组的大小相对于另一个缩小,缩小幅度超过“offset”的值
由于我使用相同的偏移值来比较它们,并且作为 (xy) - 0 = x - (0 + y),这些值必须相同。对于第一次迭代,它们是相同的,但对于第二次迭代,它们不是,正如您从打印输出中看到的那样。
我认为这个问题可能与按值传递问题有关,所以我尝试使用 copy.deepcopy,但这也不能解决问题。我还认为索引溢出索引可能有一个怪癖,所以我将高度和宽度设置为少一点,以防万一,但这也没有产生任何效果。我想知道我是否可能对切片或高级索引的工作方式有根本的误解。
这是打印输出:
这是我得到的错误,它在 while 循环的第二次迭代中触发:
这是我的代码:
python - 从压缩表示转换张量的最佳方法
我有一个表示稀疏 3-D 矩阵的压缩格式的张量。我需要将其转换为普通矩阵(它实际代表的矩阵)。因此,就我而言,矩阵的任何二维切片的每一行都只能包含一个非零元素。那么,作为数据,我对这些行中的每一行、值和它出现的索引都有。例如,张量
表示一个 4x5 矩阵(第一维来自张量的第一维,第二维来自元数据)A,其中A[0][2] = 1, A[1][4] = 3, A[2][0] = -1, A[3][1] = 45
.
这只是我的矩阵的一个二维切片,我有可变数量的这些。我能够使用 sparse_coo_tensor 以下列方式对上述二维切片执行此操作:
这是实现这一目标的最佳方法吗?有没有更简单、更易读的替代方案?如何在不循环的情况下将其扩展到 3-D 矩阵?对于 3-D 矩阵,您可以想象输入类似于
inp_list = torch.stack([inp, inp, inp, inp])
并且所需的输出将是上述输出堆叠 4 次。
我觉得如果我正确地创建了一个索引数组,我应该能够做一些事情,但是如果不使用某种循环,我想不出一种方法来做到这一点。
indexing - 如何在 xarray 中进行经纬度高级索引
我在 xarray 数据集中有一个纬度时间网格上的大气数据。我想沿着“路径”从该数据中进行选择,依此类推(纬度、经度、时间)坐标。
我曾尝试使用 xarray 高级索引。如果我只使用 (lat, lon),我会得到预期的结果:具有新空间维度和现有时间维度的新 xarray 数据集。如果我还在高级索引中包含时间,我的新数据集将包含所有 NaN 值。
我的 xarray 数据集看起来像这样(小例子):
我这样定义的新坐标:
例如 ts 看起来像这样:
然后我尝试进行高级索引:
产生 NaN 值:
任何人都可以帮我解决这个问题吗?
numpy - 仅将函数应用于满足条件的数组切片(NumPy)
我有一个数组A[i,j]
。myfunc
最后一个索引包含将应用于每个函数i
并产生输出的函数的各种输入值B[i]
。但是,许多索引的值j
不会B
对myfunc
. 这可以通过使用条件索引(例如C = C[C>mythreshold]
for 循环)相对容易地切出相关值来实现,如下面的 MWE 所示:
我不得不把它分解成 for 循环,这样我就可以在A
不删除整个数组的切片的情况下删除切片。这是因为我不能删除A[i,:]
for onei
的元素而不删除另一个的相应元素i
。但是,为了提高速度,我想尽可能地进行矢量化 - 以避免 for 循环并i
一次性完成所有操作。我怎样才能做到这一点?
注意:那是 MWE;实际情况具有更大的数组维度,因此我的数组将是A[i,j,k,l]
and B[i,j]
,因此 for 循环示例将类似于下面的代码。我认为额外的维度不会使事情复杂化,但值得一提以防万一。
python - 如何解释 numpy 高级索引解决方案
我有一段我知道有效的 numpy 代码。我知道这一点,因为我已经在我的通用案例中成功地对其进行了测试。但是,经过两个小时的反复参考文档和反复试验,我得出了解决方案。我无法理解我如何知道如何直观地做到这一点。
设置:
目标:设置为 1 轴 1 的索引 0,1、轴 2 的 0,1、轴 3 的所有索引和轴 1 的索引 3,4、轴 2 的索引 3,4、轴 3 的所有索引
更明确的目标:将块 1 和 2 的前两行设置为 1,将块 3 和 4 的最后两行设置为 1
结果:
输出:
我倾向于相信我应该能够查看相关矩阵的形状、索引的形状以及索引操作以直观地了解输出。但是,我无法将这个故事放在我的脑海中。比如,它正在改变的子空间的最终形状是什么?你会如何解释这是如何工作的?
形状:
python - 在 Pytorch 中,如何使用 BoolTensor 蒙版在多个暗淡中切片张量?
我想使用 BoolTensor 索引在 Pytorch 中对多维张量进行切片。我希望索引张量保留索引为真的部分,而将索引为假的部分切掉。
我的代码就像
我希望a[:, tr_indices, :, val_indices]
是形状[5, 25, 5, 25]
,但它返回[25, 5, 5]
。结果是
我很困惑。谁能解释为什么?