- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 n 维数组 A 并想对其进行动态切片,即给定一个数组维数列表,如 [2 4] 和一个值列表,如 [6 8],我想要
B = A(:,6,:,8,:,:,:,:,...)
列表长度未知。使用 eval 可以,但不是一种选择。这个问题是对 previous post 的概括。无需 for 循环的多个索引和维度。
最佳答案
您仍然可以使用 previous post I linked to (which I originally flagged as a duplicate) to answer your question .这篇原始帖子仅在一个维度上进行切片。我最初将其标记为重复并将其关闭,因为您需要做的就是替换原始帖子接受的答案中的一行代码以实现您想要的。但是,因为它不是那么明显,我决定重新打开问题并为您回答问题。
引用之前的帖子,就是这个Andrew Janke (在链接帖子上接受答案的人)做了(我可能会补充说非常聪明):
function out = slice(A, ix, dim)
subses = repmat({':'}, [1 ndims(A)]);
subses{dim} = ix;
out = A(subses{:});
给定一个矩阵 A
、一个索引号 ix
和您要访问的维度 dim
,上述函数将等价地执行:
out = A(:, :, ..., ix, :, :,...:);
^ ^ ^ ^
dimensions --> 1 2 dim dim+1
您可以在 dim
中访问您想要的维度,并将您想要用于切片的值放入该维度。因此,您可以这样调用它:
out = slice(A, ix, dim);
该函数的工作原理是 subses
会生成一个由 ':'
字符串(最终将转换为 ':' 运算符)组成的元胞数组,其长度与作为 A
的总维数。接下来,您将访问位于 dim
的元素,它对应于您想要的维度,您可以将其替换为 ix
。然后,您将展开此元胞数组,以便我们可以按照您在上述等效语句中看到的方式访问 A
。
Who would have thought that you can use strings to index into an array!?
现在,要概括这一点,您所要做的就是进行一个小但非常关键的更改。 ix
现在是索引的向量,dim
是您要访问的维度的向量。因此,它看起来像这样:
function out = slice(A, ix, dim)
subses = repmat({':'}, [1 ndims(A)]);
subses(dim) = num2cell(ix);
out = A(subses{:});
我们在这里看到的唯一区别是代码的第二行。我们必须使用 num2cell
这样您就可以将每个元素转换为元胞数组,然后我们切入该元胞数组以用您想要的尺寸替换 :
运算符。请注意,我们使用的是 ()
大括号,不是 {}
大括号。 ()
大括号用于对元胞数组进行切片,而 {}
用于访问元胞数组内容。因为我们要将多个单元格分配给 subses
,所以需要 ()
。然后,我们相应地在 A
中执行切片。
因此,考虑到您的问题并进行上述修改,您可以:
out = slice(A, [6 8], [2 4]);
请注意,ix
和 dim
必须 包含相同数量的元素,并且它们必须 是一维的。此外,ix
和 dim
应该是合理的输入(即不是 float 和负数)。我不进行此错误检查,因为我假设您知道自己在做什么,并且您足够聪明,知道如何正确使用它。
祝你好运!
关于arrays - Matlab数组的动态切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969296/
简而言之: 我怎样才能切片?也就是说,能够指定我想从多个索引(例如 y = x[(2, 5, 11)] )中提取,而不仅仅是单个索引(例如 y = x[2] )。 简单示例 : 说我有这个数据: d
是否可以在 F# 中对 Array2D 进行切片? 说,let tmp =Array2D.init 100 100 (fun x y -> x * 100 + y) 如何从 tmp 中检索某些列或某些
例如,我希望文本仅显示“此处”,但它不起作用。文本经常变化,但我需要的单词保持在固定位置。我想访问该词。 我做错了什么? function myFunction() { var x = doc
当尝试使用spring的分页或切片来迭代非常大的mongodb集合时,程序运行正常,但在某些时候下一页/切片为空,并且在调试时出现“包含未知实例的页面/切片”消息. 这是代码示例: do { Pa
有人能给我一个关于如何分割 ListView 的例子吗?我正在使用 SimpleCursorAdapter 在 ListView 中显示数据.. 我的代码是这样的。 private WordDbAda
这个问题在这里已经有了答案: C++ slicing causing leak / undefined behavior / crash (3 个答案) 关闭 8 年前。 如果我有如下代码: cla
这个问题在这里已经有了答案: Understanding slicing (38 个答案) 关闭 5 年前。 我目前有 500 行数据。我想使用前五十行,然后跳过 50 行,依此类推。我该如何继续这
为什么对一行或一列进行切片会产生“无量纲数组”?例如: import numpy as np arr = np.zeros((10,10)) print arr.shape # (10, 10) 但是
我有以下 pandas 数据框: Shortcut_Dimension_4_Code Stage_Code 10225003 2 8225003
如何通过数组为 ruby 中的散列创建切片,如下所示: info = { :key1 => "Lorem", :key2 => "something...", :key3 => "
这个问题在这里已经有了答案: regex to get all text outside of brackets (4 个答案) 关闭 5 年前。 我正在编写的这个程序接收到一个大小不同的字符串,其
我尝试使用 tf.Tensor.getitem 对张量进行切片功能如下: indices = [0, 5] data[:,:,indices] 但是我得到以下错误: TypeError: can on
这个问题在这里已经有了答案: Can I create a "view" on a Python list? (10 个答案) 关闭 7 年前。 有没有一种方法可以在 Python 3 中创建序列的
我想弄清楚如何从多维数组中获取单个维度(为了论证,假设它是二维的),我有一个多维数组: double[,] d = new double[,] { { 1, 2, 3, 4, 5 }, { 5, 4,
我有一个 std::vector。我想创建代表该 vector 切片的迭代器。我该怎么做?在伪 C++ 中: class InterestingType; void doSomething(slice
写在前面 前面的文章介绍了Go的一些基本类型,本文开始涉及Go的一些容器类型,它们都是可以包含多个元素的数据结构,如数组、切片、map 数组 数组是具有相同类型且长度固定的一组元素集合,定义的格式:v
给定一个 numpy 数组和一个 __getitem__ 类型的索引,是否有一种惯用的方法来获取数组的相应切片,总是返回一个数组而不是标量? 有效索引的示例包括:int、slice、省略号或上述的元组
我创建了一个继承自 pandas.DataFrame 的类。在此类中添加了元数据(不是添加到列中,而是添加到类实例中): class MeasurementPoint(pandas.DataFrame
我想在空间上剪切视频以生成 N x M 个文件。 例如,我想把 test.video 拆分成 NxM 的瓦片? Video tiles 最佳答案 您可以使用 ffmpeg 及其 crop filter
这是一个示例代码。比如我想拉德国 在页面加载时切片。在这段代码中,它拉取第一个切片。 无功图; var 传说; var chartData = [{ 国家:“立陶宛”, 值:260}, { 国家:“爱
我是一名优秀的程序员,十分优秀!