我有一个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循环来做到这一点.但有没有优化的方法呢?(我打算使用更大的矩阵)
这个问题是我在回答这个问题的时候出现的。这应该是我正在做的一些愚蠢的错误,但我无法得到它是什么错误\xe2\x80\xa6
\n\nmyMatrix = [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\nmyCell = {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\nA{1:2} 语法 A{1:2} 调用 B = subsref(A,S),其中 S.type=\'{}\' 和\n S.subs={[1 2]}。
\n
这似乎不正确,因为 subsref 返回的值只是第一个参数,而不是所有参数。 …
假设我有一个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)
如何转移index
到linear indexing
,这样
M == A(Ind)
Run Code Online (Sandbox Code Playgroud)
变成了真的?
我对这个问题的意图是,我有two
multi-dimensional
矩阵和需要计算max
的first
一个.然后,我想要在second
矩阵中正确地访问那些我在一个中找到最大值的位置first
.
我有一个用零填充的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 个?
例如,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
我目前有一个阵列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)
但那只是让我回到原来的矩阵.
有没有办法从一维数组切割零维子阵列?
例如,如果我有一个N维ndarray
arr
,则arr[0]
返回一个(N-1)维ndarray
.
但是,如果我有1维ndarray
x
,x[0]
则不返回0维ndarray,而是返回a numpy.int64
,(如果x
包含int64
s).
最小的例子:
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输入.并非所有功能都会如此灵活.
给定矩阵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)
因为重复.我有什么选择?
我想将列插入矩阵,但矩阵内的插入列位置因行而异.如何在不使用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) 我有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。