- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 Matlab 中考虑这个:
>> clear M, M(:,:,:,1,:)=rand(10,10,2,1,5); size(M)
ans =
10 10 2 1 5
>> clear M, M(:,:,:,1,:)=rand(10,10,1,1,5); size(M)
ans =
10 10 5
>> clear M, M(:,:,1,1,:)=rand(10,10,1,1,5); size(M)
ans =
10 10 1 1 5
为什么第二行代码的行为不像第一行和第三行那样? (即保持阵列的 5D 形状)
不是可以用冒号表示单例维度吗? (第二行代码中的第三维)
能否请您指出文档中相应的段落?
最佳答案
我找不到关于此事的任何具体文档,因此,除了推测之外,我将引用 Loren Shure 的一篇博文:“All about the Colon Operator”。其中大部分与这个问题无关。但是有一条特别的信息值得详细说明,我将以她结尾的一句话开头:
The
:
operator behaves differently in MATLAB depending on its usage. This can lead to confusion.
相关信息遵循 2×2 到 1×1×1×4 的分配。例如:
>> v(1,1,1,1:4) = 1:4;
>> v(:) = [5,6;7,8]
v(:,:,1,1) =
5
v(:,:,1,2) =
7
v(:,:,1,3) =
6
v(:,:,1,4) =
8
这项作业是如何进行的?洛伦解释说:
Notice that I only have to have the same number of elements on both the left- and right-hand sides. The values are poured in from the right-hand side ordered as if that array had been turned into a column vector.
因此,即使左侧和右侧对象的大小非常不同,赋值中索引-:
的出现也会强制右侧数组的形状,因为有元素等价。并且分配将被执行,就好像向量是列化的,并且 v
是 reshape
-d 到它的原始形状。
在继续讨论问题示例之前,我想指出尾随单维度(1
的下标)在 MATLAB 中的所有数组中都是无限隐含的。引用自Matrix Indexing :
The number of subscripts specified for [an array at assignment], not including trailing subscripts equal to 1, does not exceed
ndims(B)
.
我们确实可以看到:
>> clear A; A(:,:,1,1,1,1,1,1,1,1,1) = rand(2,2)
A =
0.6355 0.7823
0.8439 0.2646
>> A(2,2,1,1,1,1,1,1,1,1,1)
ans =
0.2646
>> clear A; A = 5; A(1,1,1,1,1,1,1,1,1,1,1,1,1,1)
ans =
5
尾随的单例,例如乘以 1 或加零,总是在那里。
继续问题示例,我认为 indexing-:
在分配时分配的数组中的出现使 MATLAB 在弄清楚如何给定上述灵 active 的值。与 Loren 的示例不同,M
没有要保留的形状(给定前面的 clear
),但赋值仍会将右侧的形状强制转换为类似列的形状向量。强制数组确实有一个形状。
很可能,最直观的行为,给定代码原样,是在将其值分配给 M
时保留右侧的形状。然而,另一种观点可能是尽可能多地保留 M
的形状,从而最小化赋值结果的大小。
第一个行为是通过在赋值中没有任何索引而立即完成的。而且我认为后一种行为更符合 Loren 的说法,即“值从右侧倒入,就像该数组已变成列向量一样”。一旦右侧被列化,单维度基本消失,MATLAB 将尽可能多地填充每个 :
桶,同时尊重显式维度,例如 1
出现在示例中。
所以 M(:,:,:,1,:)=rand(10,10,2,1,5);
效果很好,因为 M
通过匹配右侧的大小来精确最小化。 M(:,:,:,1,:)=rand(10,10,1,1,5); size(M)
将在形状强制期间删除中间的单例,三个连续的赋值-:
将像桶一样用 10-15-5 数组填充以最小化大小输出和剩余的单例维度将被忽略,因为它们隐式存在。并且 M(:,:,1,1,:)=rand(10,10,1,1,5);
与第三个 之后的第一个完全一样:
bucket 已替换为 MATLAB 将遵循的显式索引。
我不确定此行为中的任何地方是否存在明确的挤压
,或者它是否只是形状强制转换的 MATLAB 引擎中某处的自然结果。所以我认为最好以这样的结尾说,如果数组的形状很重要,那么它应该尽可能明确地确定大小而不使用赋值索引。
关于arrays - 高级 Matlab : colon indexing of singleton dimension in assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44598599/
我找到了符号 :=:在一些 Clarion 代码中,我似乎无法弄清楚它到底做了什么。代码是多年前以前的开发人员写的,所以我不能问他。我也找不到 "colon equals colon" 的任何结果在谷
return sessionFactory.getCurrentSession(). createQuery("FROM Weather WHERE city_id = :id
我想使用此架构创建一个数据框: |-- Col1 : string (nullable = true) |-- Col2 : string (nullable = true) |-- Col3
我有以下功能: def removeLast(list: List[Int]): List[Int] = list match { case List() => List() case Lis
我阅读了一些java源代码,其中包括Scala源代码。 我发现Nil.$colon$colon(Object arg) 关键字$colon是什么意思?这行是什么意思? 最佳答案 $colon 是符号
这个问题在这里已经有了答案: Is there any difference between the `:key => "value"` and `key: "value"` hash notati
这段代码也指代什么? queryString: function() { //some code } 我在 WebConsole (Firefox) 中对其进行了测试,但它不会执行,所以我认为它不等同
:(“冒号”)在正则表达式中有特殊含义,但我需要按原样使用,如 [A-Za-z0-9.,-:]* 。我试图逃避它,但这不起作用 [A-Za-z0-9.,-\:]* 最佳答案 在大多数正则表达式实现(包
在 Dart 中为参数设置默认值的这两种语法有什么区别: class Test { Test({ int x: 2, int y = 3, }); } 我都试过了,它们似乎完全
我想将 url 传递给 grunt 任务。不幸的是,grunt 使用的分隔符是冒号,它也存在于 url 中。 那么如何将 url 作为参数传递给 grunt 任务呢? 最佳答案 我去了 grunt.o
在 Dockerfiles 和 docker-compose 文件中,我经常偶然发现两种符号。 docker 撰写示例: volumes: - ./app/:/usr/src/app/ 示
我是 C# 和 Unity 的新手,在阅读手册时在某些示例中遇到了外来冒号语法: function Choose(probs: float[]) { var total = 0; for (elem
我是 shell 脚本的新手,我有一个这样的文本文件: `http://example.com http//example.net http//www.flugov/individualfami
我在 node.js 项目的 JavaScript 文件中的类方法中遇到了看似奇怪的代码: export const BITS_16 = 16; export const BITS_32 = 32;
所以我得到了一个错误,我不知道要修复什么,因为从我的 Angular 来看,一切都很好: CSS 代码: @font-face { font-family: 'Titillium';
一个小问题: 如果我在我的浏览器 (GoogleChrome) 控制台中输入 abc:xyz:123 它的计算结果为 123 JavaScript 如何计算:? 最佳答案 abc 和xyz 都被视为循
当我的 circleci 工作构建我的 cypress 测试时,我遇到了这个错误: [432:0312/154643.301773:ERROR:bus.cc(392)] Failed to conne
我正在使用 scalatest。问题是测试报告难以阅读。测试名称已将空格替换为 $u0020,将 : 替换为 $colon 等等。 例如: def `test: find '.gitignore' f
我正在尝试使用 JSONParse 解析 json 文件并收到此错误,该错误发生在以下 json 的开头: 位置 11 处出现意外标记 COLON(:)。 {"276716878": { "fol
为什么使用“冒号和逗号”进行切片与使用索引集合进行切片不同? 下面是一个示例,我希望得到相同的结果,但事实并非如此: import numpy as np a = np.array([[[1,2,3]
我是一名优秀的程序员,十分优秀!