标签: matrix-indexing

在matlab中索引2D数组

我有一个M1只包含0 的6X4矩阵.我还有两个1D数组Y1,Y2每个数组的长度为4.这两个数组包含所需的索引值.现在,我想设置(转换为1)矩阵的元素,M1使其 M1(Y1:Y2)等于1

为前:Y1=[1 2 2 1]Y2=[3 4 5 3]
那么,M1应该是

 1 0 0 1
 1 1 1 1 
 1 1 1 1
 0 1 1 0
 0 0 1 0
 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我可以使用for循环来做到这一点.但有没有优化的方法呢?(我打算使用更大的矩阵)

matlab matrix matrix-indexing

5
推荐指数
2
解决办法
179
查看次数

带单元格的子引用

这个问题是我在回答这个问题的时候出现的。这应该是我正在做的一些愚蠢的错误,但我无法得到它是什么错误\xe2\x80\xa6

\n\n
myMatrix = [22 33; 44 55]\n
Run Code Online (Sandbox Code Playgroud)\n\n

返回:

\n\n
>> subsref(myMatrix, struct(\'type\',\'()\',\'subs\',{{[1 2]}} ) );    \n\nans =\n\n    22    44\n
Run Code Online (Sandbox Code Playgroud)\n\n

将其与细胞一起使用时:

\n\n
myCell = {2 3; 4 5} \n
Run Code Online (Sandbox Code Playgroud)\n\n

返回:

\n\n
>> subsref(myCell,struct(\'type\',\'{}\',\'subs\',{{[1 2]}} ) );\n\nans =\n\n     2  % WHATTT?? Shouldn\'t this be 2 and 4 Matlab??\n
Run Code Online (Sandbox Code Playgroud)\n\n

检查subsref 文档,我们看到:

\n\n
\n

查看 MATLAB 如何调用表达式的 subsref:

\n\n

A{1:2} 语法 A{1:2} 调用 B = subsref(A,S),其中 S.type=\'{}\' 和\n S.subs={[1 2]}。

\n
\n\n

这似乎不正确,因为 subsref 返回的值只是第一个参数,而不是所有参数。 …

matlab subset cell-array matrix-indexing

5
推荐指数
1
解决办法
410
查看次数

多维矩阵的最大线性索引 - MATLAB

假设我有一个3-dimensional矩阵并计算了max第二维,并希望得到最大值的线性指数.但是,max-function只返回一个维度的下标.

A = randn([5,5,5]);        % Generate random matrix
[M, Ind] = max(A,[],2);    % Take the max along dimension 2
Run Code Online (Sandbox Code Playgroud)

如何转移indexlinear indexing,这样

M == A(Ind)
Run Code Online (Sandbox Code Playgroud)

变成了真的?

我对这个问题的意图是,我有two multi-dimensional矩阵和需要计算maxfirst一个.然后,我想要在second矩阵中正确地访问那些我在一个中找到最大值的位置first.

matlab matrix matrix-indexing

5
推荐指数
1
解决办法
486
查看次数

如何为numpy数组中的每一行使用不同的索引?

我有一个用零填充的NxM numpy数组和一个大小为N的1D numpy数组,大小在0到M-1之间。如您所见,数组的维数与矩阵中的行数匹配。整数数组中的每个元素意味着必须将其对应行中给定位置的位置设置为1。例如:

# The matrix to be modified
a = np.zeros((2,10))
# Indices array of size N
indices = np.array([1,4])
# Indexing, the result must be
a = a[at indices per row]
print a

[[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

我尝试使用索引,a[:,indices]但是这为每一行设置了相同的索引,最终这为所有行设置了索引。如何将给定索引设置为每行 1

python arrays numpy matrix-indexing

5
推荐指数
1
解决办法
2254
查看次数

如何沿批量维度广播 numpy 索引?

例如,np.array([[1,2],[3,4]])[np.triu_indices(2)]具有 shape (3,),是上三角条目的扁平列表。但是,如果我有一批 2x2 矩阵:

foo = np.repeat(np.array([[[1,2],[3,4]]]), 30, axis=0)
Run Code Online (Sandbox Code Playgroud)

我想获得每个矩阵的上三角索引,最简单的尝试是:

foo[:,np.triu_indices(2)]
Run Code Online (Sandbox Code Playgroud)

然而,这个对象实际上是有形状的(与我们批量提取上三角条目时所期望的相反)(30,2,3,2)(30,3)

我们如何沿着批量维度广播元组索引?

python numpy multidimensional-array matrix-indexing array-broadcasting

5
推荐指数
1
解决办法
834
查看次数

从3d矩阵中提取多个列

我目前有一个阵列A,其尺寸为N xtx t.我想创建一个形式的2D矩阵N xt:

B = [ A[:,1,1] A[:,2,2],...,A[:,t,t]]
Run Code Online (Sandbox Code Playgroud)

显然,我能做到的两种方法是完全写出来(因为t很大而不切实际)和循环(可能很慢).有没有办法没有循环这样做.我认为如果我这样做会有效:

B = A[:,[1:end],[1:end]]
Run Code Online (Sandbox Code Playgroud)

但那只是让我回到原来的矩阵.

matlab loops matrix matrix-indexing

4
推荐指数
1
解决办法
1553
查看次数

如何从numpy中的1维数组中提取零维切片

有没有办法从一维数组切割零维子阵列?

例如,如果我有一个N维ndarray arr,则arr[0]返回一个(N-1)维ndarray.

但是,如果我有1维ndarray x,x[0]则不返回0维ndarray,而是返回a numpy.int64,(如果x包含int64s).

最小的例子:

def increment(zero_d_array):
    zero_d_array[...] = zero_d_array + 1

counter = numpy.array(0)  # a zero-dimensional array containing scalar 0
increment(counter)        # success; counter is now 1

counters = numpy.zeros(3, dtype=int)  # [0, 0, 0]
increment(counter[1])    # fails; counter[1] is a numpy.int64, not a 0-D array
Run Code Online (Sandbox Code Playgroud)

我意识到上面的方法可以使用increment(counter[1:2]),但只是因为increment()碰巧适用于0-D和1-D输入.并非所有功能都会如此灵活.

python numpy slice matrix-indexing

4
推荐指数
1
解决办法
421
查看次数

求矩阵元素匹配条件的索引 - Matlab

给定矩阵Z(i,j)使得它映射到两个阵列X(i)和Y(j).我试图在一定范围内找到Z的元素(以及相应的X和Y).

我现在使用逻辑索引执行以下操作.鉴于这个例子

 X = 1:5;
 Y = 1:5;
 Z =    [17    24     1     8    15
         23     5     6    14    16
          4     6    13    20    22
         10    12    19    21     3
         11    18    25     2     9]
 Z((X>1 & X<4),Y==3)
Run Code Online (Sandbox Code Playgroud)

这工作正常,但现在我希望找到此特定范围内返回值的最小值,

我在做什么

min(Z((X>1 & X<4),Y==3))
Run Code Online (Sandbox Code Playgroud)

但是现在我如何找回最小值的相应X和Y值?由于我的逻辑索引返回一个数组,到目前为止我尝试的所有方法都返回了答案数组中min的索引,而不是原始的Z矩阵.

我不能用

[row col] = find(Z==min(Z((X>1 & X<4),Y==3)))
Run Code Online (Sandbox Code Playgroud)

因为重复.我有什么选择?

matlab matrix find matrix-indexing

4
推荐指数
1
解决办法
1533
查看次数

在Matlab中将列插入矩阵

我想将列插入矩阵,但矩阵内的插入列位置因行而异.如何在不使用for循环的情况下执行此操作?

以下是MATLAB中的简化示例; 从A,X,P,我想在不使用for循环的情况下获得APX.

>> A = zeros(4,5)     % inclusive matrix   

 A =  
     0    0    0    0    0  
     0    0    0    0    0  
     0    0    0    0    0  
     0    0    0    0    0  

>> X = [9,8;5,7;8,3;6,7]   % data to insert  

  X =  
   9   8  
   5   7   
   8   3  
   6   7  

>> P = [3;2;4;1]  % insertion position within the matrix  

P =  
   3  
   2  
   4  
   1  

>> APX = [0,0,9,8,0;0,5,7,0,0;0,0,0,8,3;6,7,0,0,0]   % what I want  

  APX =  
   0   0   9   8 …
Run Code Online (Sandbox Code Playgroud)

matlab matrix-indexing

4
推荐指数
1
解决办法
223
查看次数

Numpy 3d 数组索引

我有3D numpy的阵列(N_SAMPLES次X num_components×2在下面的示例)N_SAMPLES次= 5和num_components = 7。

我有另一个数组(索引),它是每个形状(n_samples,)的样本的选定组件。

我想从给定索引的数据数组中进行选择,以便结果数组为n_samples x 2

代码如下:

import numpy as np
np.random.seed(77)
data=np.random.randint(low=0, high=10, size=(5, 7, 2))
indices = np.array([0, 1, 6, 4, 5])
#how can I select indices from the data array?
Run Code Online (Sandbox Code Playgroud)

例如,对于数据 0,所选组件应为第 0,对于数据 1,所选组件应为 1。

请注意,我不能使用任何 for 循环,因为我在 Theano 中使用它,并且解决方案应该完全基于 numpy。

python arrays numpy matrix-indexing array-broadcasting

4
推荐指数
1
解决办法
9143
查看次数