Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >论射线的形状无关切片

论射线的形状无关切片
EN

Stack Overflow用户
提问于 2014-03-20 07:14:55
回答 2查看 541关注 0票数 13

在这篇文章中,我使用术语片来指n维数组B_i的子数组A,对于某些维dsize(B_i, d)是1。Asize(A, d)这样的切片组成,沿着维度d连接起来。

例如,如果ndims(A)为6,d为3,则表单的表达式

代码语言:javascript
运行
AI代码解释
复制
A(:, :, i, :, :, :)

对于i中的1:size(A, d),表示构成A的所有切片(沿维度d)。

A(:, :, i, :, :, :)这样的表达式的问题是,它不能象征性地推广到维数与6维不同的数组中的3维上的切片,例如,要在维2上得到A的切片,就需要一个不同的表达式,A(:, i, :, :, :, :)。这意味着这些表达式在不可知某些数组形状的代码中是无用的,因为这些数组将从中提取切片。

下面的函数是我的matlab-noob试图实现形状无关的切片.(名称slice已经被采用,因此我将函数hslice称为hyperslice的缩写。)该函数的策略是将输入数组整形为一个合适的三维数组,沿着重塑后的数组的第二维取所需的切片,并将结果从原始的输入数组中整形成一个切片的形状。

代码语言:javascript
运行
AI代码解释
复制
function out = hslice(ndarray, d, i)
    sz = size(ndarray);
    pfx = sz(1:d-1);    % dimensions before d
    sfx = sz(d+1:end);  % dimensions after d

    tmp = reshape(ndarray, prod(pfx), sz(d), prod(sfx));
    out = reshape(tmp(:, i, :), [pfx 1 sfx]);
end

是否有一种内置的,或至少更有效的方法来达到同样的结果(以一种不可知的方式)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-20 08:36:32

嗯。您可以使用取消引用的单元格数组和“逗号分隔列表”之间的等价性,以及可以使用char ':‘作为索引来动态构造任意维度的A(:, :, :, i, :, ...)调用这一事实。

代码语言:javascript
运行
AI代码解释
复制
function out = slice(A, ix, dim)

subses = repmat({':'}, [1 ndims(A)]);
subses{dim} = ix;
out = A(subses{:});

这将是完全概括的,并且将执行与原始静态A(:, :, i, :, ...)表达式完全相同的“切片”索引操作,除了旋转这些字符串来设置它的开销之外。

或者,如果您愿意,只需使用sprintf将该A(:, :, i, :, ...)构造为字符串,然后在其上调用eval()。但如果可能的话,我喜欢避免eval

请注意,您最初的实现使用的是快速操作,并且应该执行得很好,大约和这次一样快。我只是张贴这个,因为我认为它是非常可读的,回答你的问题,原来提出的,它可以应用于其他有用的东西。

片的分配

您还可以使用相同的单元内下标技术作为分配给数组片的lvalue。但是,您不能直接重用slice函数,因为它返回数组的提取子集,而不是lvalue引用。所以你可以做一个非常相似的函数来完成任务本身。

代码语言:javascript
运行
AI代码解释
复制
function A = slice_assign(A, ix, dim, B)
%SLICE_ASSIGN Assign new values to a "slice" of A

subses = repmat({':'}, [1 ndims(A)]);
subses{dim} = ix;
A(subses{:}) = B;

实际上,您还可能需要一个函数,该函数只返回单元格数组中的计算索引,因此您可以随身携带这些索引,并将它们反复用于赋值和引用。

代码语言:javascript
运行
AI代码解释
复制
function out = slice_subs(A, ix, dim)

subses = repmat({':'}, [1 ndims(A)]);
subses{dim} = ix;
out = subses;
票数 17
EN

Stack Overflow用户

发布于 2014-03-20 07:58:58

您可以尝试permutesetdiff将该维度移动到一致的位置:

代码语言:javascript
运行
AI代码解释
复制
function out = hslice(ndarray, d, i)
subdims = setdiff(1:ndims(ndarray),d);
sz = size(ndarray);
outsz = sz(subdims);
order = [d subdims];
ndarray = permute(ndarray,order);
out = reshape(ndarray(i,:),outsz);
end

例如:

代码语言:javascript
运行
AI代码解释
复制
d = 3; i = 2;
nd = randi(23,3,3,3,2);
out = hslice(nd,d,i);   % out = squeeze(nd(:,:,i,:)) for d=3

但是,数据是在这里切片之前重写的,而不是用问题中的代码重写的。所以,我会和行动小组一起去!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22537326

复制
相关文章
客户端 Meteor.call 等待服务端异步函数返回
在 Meteor 项目中,经常会有客户端使用 Meteor.call 方法去调用服务端的一个方法,并等待该方法返回。通常情况下,服务端的方法只需要 return 后,客户端使用回调函数就可以访问到 return 的值了。但如果服务端同样调用了一个异步执行的函数,那么此时就无法判断服务端的异步函数是否已经执行完毕,返回结果就会出现不准确的情况。如下所示:
我与梦想有个约会
2023/10/20
2800
客户端 Meteor.call 等待服务端异步函数返回
Meteor 微信公共号开发将客户端日志传递到服务端打印
因为在微信客户端环境,我们无法使用 console.log 查看前端显示的一些调试信息,如果需要用到调试,我们一般是使用 Session 方法来给前端一个固定专门显示日志的变量设定属性,这样这个固定的变量会跟随 Session.set 设定的值而变化。后面想了一个比较方便的办法,直接将客户端需要输出的日志信息通过 Meteor.call 发送到服务端打印我们就可以方便的在服务端一起看到server log 和 client log 了。
我与梦想有个约会
2023/10/20
2010
Meteor 微信公共号开发将客户端日志传递到服务端打印
不同函数间的数据传递
        小程序不想mvc的框架一样,获取dom进行操作,只是依靠数据绑定,数据有限原则进行数据传输.
十月梦想
2018/08/29
6350
meteor 简介
“Meteor gives you a radically simpler way to build realtime mobile and web apps, entirely in JavaScript from one code base.”
IMWeb前端团队
2019/12/04
9280
meteor 简介
meteor 简介
本文作者:IMWeb helondeng 原文出处:IMWeb社区 未经同意,禁止转载 What “Meteor gives you a radically simpler way to b
IMWeb前端团队
2018/01/08
1.4K0
meteor 简介
从0开始做系统之传递数据
我们做系统,光有后台不行,还得有好看和便利的前台来操作和展示信息。前端一般是用html5和JS来控制。如果好看,你还得懂css。 后台控制数据和逻辑,前台控制交互和展示。所以前后台得通信,交换信息。这里就是讲他们如何传递数据的。 市面上的系统一般的架构都是MVC的,M指的是model,数据库这层。V是view,界面这层,C是控制逻辑这层。 如果我们打开一个网页,请求网址后,它会去C这层,去哪个路由,要什么样的业务逻辑,展现到哪个页面,都是由这层控制。先去M里面拿取数据,然后渲染到V这层,最终面对的是用户。
赵云龙龙
2019/07/11
1.5K0
从0开始做系统之传递数据
结构体数组在函数之间传递数据
明的数组,进行函数调用时,实参将数组名中存放的数组首地址传递给形参数组名。这样,实参数组名和形参名代表的是同一个结构体数组,因此在被调函数中对数组元素结构体变量的值进行修改后,回到主调函数通过实参数组名访问数组时,可以发现这个改变。
pigeon
2022/04/11
1.9K0
结构体数组在函数之间传递数据
✨从异步讲起,时间,时间,请给函数以答案!
如果你能清晰准确地回答出这3个关于异步老生常谈的经典问题,可以跳过下一小节的释义。
掘金安东尼
2022/11/07
1.1K0
✨从异步讲起,时间,时间,请给函数以答案!
聊聊reactor异步线程的变量传递
在传统的请求/应答同步模式中,使用threadlocal来传递上下文变量是非常方便的,可以省得在每个方法参数添加公用的变量,比如当前登录用户。但是业务方法可能使用了async或者在其他线程池中异步执行,这个时候threadlocal的作用就失效了。
code4it
2018/09/17
3.4K0
Golang函数参数的值传递和引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
仙人技术
2021/08/31
2.6K0
Golang函数参数的值传递和引用传递
结构体类型数据在函数之间的传递
(3)结构体变量也可以作为函数的返回值,使用 return语句从被调函数返回一个结构体变
pigeon
2022/04/11
2.2K0
结构体类型数据在函数之间的传递
bootstrap typeahead 异步从后台提取数据 常用 *
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.js"></script> <script src="js/bootstrap3-typeahead.min.js"></script> </head> <body> <div style="margin: 50px 50px"> <input type="text" id="txtUser" name="txtUser" value="" />
用户5760343
2019/07/07
1.2K0
回调函数Callback —从同步思维切换到异步思维
这是一种非常常见的直线性思维,我先请求网站拿到 html,然后我再把 html 传给负责处理的函数。在整个过程中,“我“担任着调度的角色。
王图思睿
2021/06/16
8060
用回调函数调用异步流回调函数内的数据
本文的标题看起来也许比较绕,看不懂也没关系,后面会慢慢说明。写这篇文章是为了记录一下前几天我碰到的一个问题。
凌虚
2020/07/18
2K0
用回调函数调用异步流回调函数内的数据
【Python】函数进阶 ③ ( 函数作为参数传递 )
之前介绍的函数 , 都是 接收具体的 变量 或 字面量 数据 作为参数 , 如 : 数字 / 布尔值 / 字典 / 列表 / 元组 等 ;
韩曙亮
2023/10/11
5460
【Python】函数进阶 ③ ( 函数作为参数传递 )
Java 函数调用时值传递还是引用传递?
值传递:函数调用时,传递的参数不是实参本身,而是把参数复制一份,传递到函数中,传递的是一份拷贝。如果参数是基本类型/值类型,那么就是把这个类型拷贝一份传到函数中。如果参数是引用类型,那么拷贝的不是引用类型自身,而是这个引用的持有者。 引用传递:函数在调用时,传递的参数就是实参本身(C#中的 ref 就是这种模式)。
水货程序员
2018/11/12
3K0
高性能:MYSQL异步客户端
实时处理领域,当需要使用外部存储数据染色的时候,需要慎重对待,不能让与外部系统之间的交互延迟对流的整个进度取决定性的影响。
Spark学习技巧
2018/12/07
4.6K0
引用传递函数值
def test1(b): # 变量b一定是一个局部变量,就看它指向的是谁?可变还是不可变 b += b # += 是直接对b指向的空间进行修改,而不是让b指向一个新的 # b = b+b # xx = xx+yyy 先把=号右边的结果计算出来,然后让b指向这个新的地方,不管原来b指向谁 # 现在b一定指向这个新的地方 # a = [11, 22] a = 100 test1(a) print(a) # Python中函数参数是引用传递(注意不是值
汪凡
2018/05/29
6500
向Bash函数传递参数
除非发生语法错误或已存在同名的只读函数,否则函数定义的退出状态为零。执行时,函数的退出状态码是在主体中执行的最后一个命令的退出状态码。
程序熵
2023/09/25
2400
向Bash函数传递参数
点击加载更多

相似问题

如何在Meteor函数中获取异步数据

13

Meteor客户端异步回调

11

异步函数将数据传递给异步函数

20

React将数据从输入传递到异步函数

30

如何将数据从异步函数传递给

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档