lll*_*lll 6 python arrays tuples numpy scipy
我找到了一个与我非常相似的问题,但不完全相同.这一个:这里 但是在ntimes的情况下,数组的大小与元组指向的维度的数量相匹配.在我的情况下,我有一个4维数组和一个二维元组,就像这样:
from numpy.random import rand
big_array=rand(3,3,4,5)
tup=(2,2)
Run Code Online (Sandbox Code Playgroud)
我想使用元组作为前两个维度的索引,并手动索引最后两个维度.就像是:
big_array[tup,3,2]
Run Code Online (Sandbox Code Playgroud)
但是,我沿着第四维获得了索引= 2的第一维的重复(因为它在技术上没有被索引).这是因为这个索引将双索引解释为第一维而不是每个维的一个值,
eg.
| dim 0:(index 2 AND index 2) , dim 1:(index 3), dim 2:(index 2), dim 3:(no index)|
instead of
|dim 0(index 2), dim 1(index 2), dim 2:(index 3), dim 3:(index 2)|.
Run Code Online (Sandbox Code Playgroud)
那我怎么能"打开"这个元组呢?有任何想法吗?谢谢!
因为您正在使用numpy
:
big_array[tup+(3,2)]
Run Code Online (Sandbox Code Playgroud)
应该管用.当你打电话时__getitem__
(通过方括号),这些东西被传递给__getitem__
元组.你只需要在tuple
这里显式构造(将元组连接在一起连接成一个新的元组)并numpy
完成你想要的.
您还可以单独传入第一个元组来获取感兴趣的切片,然后单独对其进行索引:
from numpy.random import rand
big_array=rand(3,3,4,5)
chosen_slice = (2,2)
>>> big_array[ chosen_slice ]
array([[ 0.96281602, 0.38296561, 0.59362615, 0.74032818, 0.88169483],
[ 0.54893771, 0.33640089, 0.53352849, 0.75534718, 0.38815883],
[ 0.85247424, 0.9441886 , 0.74682007, 0.87371017, 0.68644639],
[ 0.52858188, 0.74717948, 0.76120181, 0.08314177, 0.99557654]])
>>> chosen_part = (1,1)
>>> big_array[ chosen_slice ][ chosen_part ]
0.33640088565877657
Run Code Online (Sandbox Code Playgroud)
对于某些用户来说,这可能更具可读性,但除此之外,我会倾向于 mgilson 的解决方案。
归档时间: |
|
查看次数: |
6987 次 |
最近记录: |