小编Lui*_*ndo的帖子

什么时候调用onSaveInstanceState()和onRestoreInstanceState()?

下图(来自官方文档)描述了Android活动的众所周知的生命周期:

在此输入图像描述

在另一方面,当活动是由系统(例如,由于存储器需要被回收的)破坏,该活动的状态有时自动地保存和恢复由所述方法的装置onSaveInstanceState()onRestoreInstanceState()由下图所示(也来自官方文件):

在此输入图像描述

我知道,onSaveInstanceState()不是总叫当活动即将被销毁.例如,如果由于用户按下"后退"按钮而导致销毁,则不会保留活动状态.但是在状态保存并恢复和onSaveInstanceState()/ onRestoreInstanceState()被调用的情况下,它们究竟何时被调用

例如,根据上面的图,onRestoreInstanceState()可以在之前onStart(),之后onStart()但之前onResume()或之后调用onResume().同样,存在几种可能性onSaveInstanceState().那他们什么时候打电话呢?

理想情况下,我希望看到一个组合图,显示活动生命周期状态和保存/恢复方法(如果存在).

android restore android-lifecycle android-activity

94
推荐指数
4
解决办法
5万
查看次数

生成包含取自n个向量的所有元素组合的矩阵

这个问题经常以某种形式出现(例如,见此处此处).所以我认为我会以一般形式呈现它,并提供一个可能供将来参考的答案.

给定任意数量n的可能不同大小的向量,生成一个n列矩阵,其行描述从这些向量中获取的元素的所有组合(笛卡尔积).

例如,

vectors = { [1 2], [3 6 9], [10 20] }
Run Code Online (Sandbox Code Playgroud)

应该给

combs = [ 1     3    10
          1     3    20
          1     6    10
          1     6    20
          1     9    10
          1     9    20
          2     3    10
          2     3    20
          2     6    10
          2     6    20
          2     9    10
          2     9    20 ]
Run Code Online (Sandbox Code Playgroud)

arrays matlab combinations matrix cartesian-product

54
推荐指数
3
解决办法
2万
查看次数

添加到100的随机数:Matlab

[我正在将一个人口编号分成不同的矩阵,并希望现在使用随机数来测试我的代码.]

快速提问的人,感谢您的帮助 -

如果我使用;

 100*rand(9,1)
Run Code Online (Sandbox Code Playgroud)

使这9个数字加到100的最佳方法是什么?

我想要0到100之间的9个随机数,加起来为100.

是否有内置命令执行此操作,因为我似乎无法找到它.

random matlab uniform-distribution

40
推荐指数
3
解决办法
3万
查看次数

线性索引,逻辑索引以及所有这些

我们习惯于在Matlab中使用不同形式的索引:

  • 标准(使用每个维度的整数),
  • 逻辑(使用逻辑值),
  • 线性(使用单个索引遍历具有多个维度的数组).

乍一看,似乎这些形式是独占的:索引是标准的,逻辑的或线性的.然而,有时似乎在这些形式中的几种之间存在混合.例如,

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> A(A>5)
ans =
     8
     9
     6
     7
Run Code Online (Sandbox Code Playgroud)

这是合乎逻辑的索引,对吧?但它也具有线性索引的一些功能,因为返回了列向量.实际上,逻辑索引A>5与线性索引具有相同的效果find(A>5).

作为第二个例子,考虑一下

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> A(1:2, [true false true])
ans =
     8     6
     3     7
Run Code Online (Sandbox Code Playgroud)

在此表达式中,标准(整数值)索引用于第一个坐标,逻辑索引用于第二个坐标.

这些例子(以及在实践中出现的更复杂的例子)提出了以下问题:

  • Matlab有哪些类型的索引?
  • 它们如何结合起来?
  • 他们应该如何被提及?

arrays matlab matrix matrix-indexing

33
推荐指数
1
解决办法
2620
查看次数

Matlab是否接受非整数索引?

当然不是!......或者是吗?我们来做一些测试.

定义x = [10 20 30 40 50].然后,正如预期的那样,以下任何语句都会在Matlab中出现错误(下标索引必须是实数正整数或逻辑):

>> x(1.2)
>> x(-0.3)
>> x([1.4 2 3])
>> x([1.4 2.4 3.4])
>> x([1.4:4])
>> x(end/2)
Run Code Online (Sandbox Code Playgroud)

但是,冒号索引中接受非整数值.以下所有工作都在最近的Matlab版本中,尽管有一个警告(当用作索引时,冒号操作符需要整数操作数).

>> x(1.2:3)
ans =
    10    20

>> x(0.4:3)
ans =
    10    10    20

>> x(0.6:3)
ans =
    10    20    30

>> x(1.2:0.7:5)
ans =
    10    20    30    30    40    50

>> x(-0.4:3)
ans =
    10    10    20    30
Run Code Online (Sandbox Code Playgroud)

如果冒号表达式包括end:

>> x(1.5:end-2)
ans = …
Run Code Online (Sandbox Code Playgroud)

arrays matlab octave matrix-indexing

30
推荐指数
1
解决办法
1301
查看次数

在MATLAB中使用转置与ctranspose

在MATLAB中转置向量/矩阵时,我已经看过并使用了'(撇号)运算符很长一段时间.

例如:

>> v = [ 1 2 3 ]'

v = 

    1
    2
    3
Run Code Online (Sandbox Code Playgroud)

然而,这是我最近发现的共轭转置,或者ctranspose.

这似乎只涉及涉及复杂数字的情况,如果您想要转换矩阵而不获取共轭,则需要使用.'opertator.

那么使用.'真实矩阵和向量是否是好习惯?我们应该怎样教MATLAB初学者?

arrays matlab matrix

26
推荐指数
3
解决办法
2295
查看次数

创建指标矩阵

对于向量V的大小为nx 1,我想创建二进制指示符矩阵中号的大小为nx最大(V) ,使得所述行条目中号具有1中的相应的列的索引,0否则.

例如:如果V

V = [ 3
      2
      1
      4]
Run Code Online (Sandbox Code Playgroud)

指标矩阵应该是

M= [ 0 0 1 0
     0 1 0 0
     1 0 0 0
     0 0 0 1]
Run Code Online (Sandbox Code Playgroud)

arrays matlab matrix

24
推荐指数
2
解决办法
8688
查看次数

与bsxfun相比,隐式扩展的速度有多快?

正如Steve Eddins 评论的那样,隐式扩展(在Matlab R2016b中引入)比小数组大小更快,并且对于大型数组具有相似的速度:bsxfun

在R2016b中,在大多数情况下,隐式扩展的工作速度比bsxfun快或快.隐式扩展的最佳性能增益是小矩阵和数组大小.对于大矩阵大小,隐式扩展往往与大致相同bsxfun.

此外,扩展所发生的维度可能会产生影响:

当第一维中存在扩展时,运算符可能不会那么快bsxfun.

(感谢@Poelie@rayryeng让我知道 关于这个!)

自然会出现两个问题:

  • 与隐式扩展相比,快多少bsxfun
  • 对于什么数组大小或形状有显着差异?

arrays performance matlab bsxfun

23
推荐指数
1
解决办法
462
查看次数

Matlab - bsxfun不再比repmat快吗?

我正在尝试找到在Matlab中标准化矩阵的最快方法(零均值,单位方差列).这一切都归结为将相同操作应用于矩阵中所有行的最快方法.我读过的每篇文章都得出了相同的结论:使用bsxfun而不是repmat.本文由Mathworks编写,是一个例子:http://blogs.mathworks.com/loren/2008/08/04/comparing-repmat-and-bsxfun-performance/

但是,在我自己的计算机上尝试这个时,repmat总是更快.以下是我使用与文章中相同代码的结果:

m = 1e5;
n = 100;
A = rand(m,n);

frepmat = @() A - repmat(mean(A),size(A,1),1);
timeit(frepmat)

fbsxfun = @() bsxfun(@minus,A,mean(A));
timeit(fbsxfun)
Run Code Online (Sandbox Code Playgroud)

结果:

ans =

    0.0349


ans =

    0.0391
Run Code Online (Sandbox Code Playgroud)

事实上,无论输入矩阵有多小或多大,我都无法在这种情况下使bsxfun表现得比repmat更好.

有人可以解释一下吗?

arrays matlab bsxfun

21
推荐指数
1
解决办法
2549
查看次数

梯度下降代码的矢量化

我正在Matlab上实现批量梯度下降.我的更新步骤有问题theta. theta是两个组件(两行)的向量. X是包含m行(训练样本数)和n=2列(特征数)的矩阵.Y是m行向量.

在更新步骤中,我需要将每个设置theta(i)

theta(i) = theta(i) - (alpha/m)*sum((X*theta-y).*X(:,i))
Run Code Online (Sandbox Code Playgroud)

这可以通过for循环完成,但我无法弄清楚如何对其进行矢量化(因为该X(:,i)术语).

有什么建议吗?

matlab gradient-descent

15
推荐指数
1
解决办法
1万
查看次数