Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy根据索引选择子矩阵_Python_Arrays_Numpy - Fatal编程技术网

Python numpy根据索引选择子矩阵

Python numpy根据索引选择子矩阵,python,arrays,numpy,Python,Arrays,Numpy,我想根据一些列索引和行索引选择一个子矩阵 我犯了一个奇怪的错误。我能够根据索引行和索引列对矩阵进行切片,但不能同时根据两者进行切片 我怎样才能解决这个问题 >>> X.shape (1000, 30) >>> type(X) <class 'numpy.ndarray'> >>> X array([[ 0.06349252, -0.19222932, -0.51720414, ..., 0.17566853,

我想根据一些列索引和行索引选择一个子矩阵

我犯了一个奇怪的错误。我能够根据索引行和索引列对矩阵进行切片,但不能同时根据两者进行切片

我怎样才能解决这个问题

>>> X.shape
(1000, 30)
>>> type(X)
<class 'numpy.ndarray'>
>>> X
array([[ 0.06349252, -0.19222932, -0.51720414, ...,  0.17566853,
         0.15821072,  0.0478738 ],
       [ 0.88497758,  0.22215627,  1.63248497, ...,  0.77716638,
         0.76535743,  0.11670681],
       [ 0.13308973, -0.12106689, -0.51353645, ...,  1.32546684,
         0.8276816 ,  1.25001549],
       ..., 
       [-0.25907157, -0.24458445, -0.87298188, ...,  0.6467455 ,
         0.43216921,  0.57972136],
       [ 1.23272918,  0.14475037,  0.16869452, ...,  0.27710557,
        -1.39863587, -0.10482702],
       [-0.57754589,  0.77061869,  1.88473625, ...,  0.31680682,
         1.64699058,  0.92152533]])
>>> j = np.random.choice(10, 5)
>>> i = np.random.choice(10,1000)
>>> X[i, :]
array([[-0.90775982,  0.82286474, -0.94136182, ...,  1.11494763,
         0.04252439,  1.08999938],
       [-2.51998203, -0.47154878, -0.88228892, ..., -0.03526119,
         0.40444398,  0.27545503],
       [-0.90775982,  0.82286474, -0.94136182, ...,  1.11494763,
         0.04252439,  1.08999938],
       ..., 
       [ 0.29236619, -1.53595325,  0.77567467, ...,  0.45090184,
         1.49180382,  1.04571078],
       [ 0.13308973, -0.12106689, -0.51353645, ...,  1.32546684,
         0.8276816 ,  1.25001549],
       [ 0.57790133, -1.11712824, -0.47716697, ...,  0.27169274,
        -0.84223531, -0.99293644]])
 >>> X[:, j]
array([[-0.51720414,  0.60436212,  0.54243319,  0.06349252, -0.19222932],
       [ 1.63248497, -0.75034999, -0.41102324,  0.88497758,  0.22215627],
       [-0.51353645,  0.74373642, -0.76499708,  0.13308973, -0.12106689],
       ..., 
       [-0.87298188, -0.14638175,  0.0278893 , -0.25907157, -0.24458445],
       [ 0.16869452, -0.42747292,  0.49202016,  1.23272918,  0.14475037],
       [ 1.88473625, -0.21566782, -0.52799588, -0.57754589,  0.77061869]])
>>> X[i, j]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
>>> 
>>X.shape
(1000, 30)
>>>类型(X)
>>>X
数组([[0.06349252,-0.19222932,-0.51720414,…,0.17566853,
0.15821072,  0.0478738 ],
[ 0.88497758,  0.22215627,  1.63248497, ...,  0.77716638,
0.76535743,  0.11670681],
[ 0.13308973, -0.12106689, -0.51353645, ...,  1.32546684,
0.8276816 ,  1.25001549],
..., 
[-0.25907157, -0.24458445, -0.87298188, ...,  0.6467455 ,
0.43216921,  0.57972136],
[ 1.23272918,  0.14475037,  0.16869452, ...,  0.27710557,
-1.39863587, -0.10482702],
[-0.57754589,  0.77061869,  1.88473625, ...,  0.31680682,
1.64699058,  0.92152533]])
>>>j=np.随机选择(10,5)
>>>i=np.随机选择(101000)
>>>X[i,:]
数组([[-0.90775982,0.82286474,-0.94136182,…,1.11494763,
0.04252439,  1.08999938],
[-2.51998203, -0.47154878, -0.88228892, ..., -0.03526119,
0.40444398,  0.27545503],
[-0.90775982,  0.82286474, -0.94136182, ...,  1.11494763,
0.04252439,  1.08999938],
..., 
[ 0.29236619, -1.53595325,  0.77567467, ...,  0.45090184,
1.49180382,  1.04571078],
[ 0.13308973, -0.12106689, -0.51353645, ...,  1.32546684,
0.8276816 ,  1.25001549],
[ 0.57790133, -1.11712824, -0.47716697, ...,  0.27169274,
-0.84223531, -0.99293644]])
>>>X[:,j]
数组([[-0.51720414,0.60436212,0.54243319,0.06349252,-0.19222932],
[ 1.63248497, -0.75034999, -0.41102324,  0.88497758,  0.22215627],
[-0.51353645,  0.74373642, -0.76499708,  0.13308973, -0.12106689],
..., 
[-0.87298188, -0.14638175,  0.0278893 , -0.25907157, -0.24458445],
[ 0.16869452, -0.42747292,  0.49202016,  1.23272918,  0.14475037],
[ 1.88473625, -0.21566782, -0.52799588, -0.57754589,  0.77061869]])
>>>X[i,j]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:形状不匹配:无法将对象广播到单个形状
>>> 

我认为您必须分别为它们编制索引:

X[i, :][:, j]
问题是NumPy试图将
i
中的每一行索引与
j
中相应的列索引相匹配,但它们的长度不同


例如,
X[(1,2)、(3,4)]
将选择元素
X[1,3]
X[2,4]
,但是
X[(1,2)、(3,4,5)]
将不匹配。

您可以使用如下切片:
a[i1:i2,j1:j2]
…@SaulloCastro所以基本上numpy不支持在这两个维度上建立索引?@Donbeo它可能影响不大。可能更快。