相对于当前索引的切片

时间:2019-11-16 09:52:29

标签: python arrays numpy

如何获得相对于当前索引的4个元素。例如在一个numpy数组中:

a = np.random.random((5,5)) * 5

看起来像

array([[0.28849442, 1.6967782 , 3.98677035, 3.70602532, 3.86017719],
    [0.93613671, 1.71077358, 4.97554427, 3.60912429, 4.59531928],
    [4.77133051, 1.76220853, 4.11181087, 1.78716602, 2.37373539],
    [4.12093364, 3.54107656, 0.63393302, 3.16444722, 4.89785727],
    [1.80700625, 0.60800477, 3.82513151, 1.64708491, 1.32580387]])

对于row = 1和column = 1,我需要获取前两个和后两个元素。此处的值为:0.93613671, 4.97554427, 3.60912429

我该如何使用切片语法?

3 个答案:

答案 0 :(得分:2)

如果要将同一行中的前两个元素和下一个元素 。

i, j = 1, 1

a = [i, max(0, j -2):min(a.shape[1] + 1, j + 3)]

但是,这也会返回值a [i,j]。

答案 1 :(得分:0)

这应该可以解决问题:

In [11]: a = np.random.random((5, 5)) * 5                                                                                                                                                                          

In [12]: a                                                                                                                                                                                                         
Out[12]: 
array([[2.69912989, 0.22025657, 4.42243823, 2.25742595, 2.32710693],
       [1.80637901, 4.3168534 , 3.60375159, 1.35948513, 4.01575109],
       [3.08628445, 3.90280485, 2.88931891, 3.68739947, 2.88882592],
       [4.78280824, 2.51712145, 3.17672241, 1.10675052, 4.9237791 ],
       [3.84915085, 3.45205488, 4.29567419, 0.57508107, 1.43595208]])

In [13]: i, j = 1, 1                                                                                                                                                                                               

In [14]: temp = a[i, max(0, j - 2):j + 3]                                                                                                                                                                          

In [15]: temp                                                                                                                                                                                                      
Out[15]: array([1.80637901, 4.3168534 , 3.60375159, 1.35948513])

In [16]: a = np.delete(temp, len(temp) // 2 - 1)                                                                                                                                                                   

In [17]: a                                                                                                                                                                                                         
Out[17]: array([1.80637901, 3.60375159, 1.35948513])

答案 2 :(得分:0)

import np
a = np.random.random((5,5)) * 5
b = int(input("Line:"))
c = int(input("Column:"))
for i in set(range(c-2, c)).union(set(range(c+1, c+3))):
    if i in range(0, 5):
        print(a[b][i])