Python 相对于当前索引进行切片

Python 相对于当前索引进行切片,python,arrays,numpy,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.787

如何获得与当前索引相关的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


如果您希望前两个元素和下一个元素位于同一行中,如何使用切片语法获得此结果?

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

但是,如果希望前两个元素和下一个元素位于同一行中,这也将返回值a[i,j]。

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

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

这应该可以实现以下功能:

[11]中的
a=np.random.random((5,5))*5
在[12]中:a
出[12]:
阵列([[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]])
[13]中:i,j=1,1
In[14]:temp=a[i,max(0,j-2):j+3]
In[15]:温度
Out[15]:数组([1.80637901,4.3168534,3.60375159,1.35948513])
在[16]中:a=np.delete(temp,len(temp)//2-1)
在[17]中:a
Out[17]:数组([1.80637901,3.60375159,1.35948513])

这应该可以做到:

[11]中的
a=np.random.random((5,5))*5
在[12]中:a
出[12]:
阵列([[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]])
[13]中:i,j=1,1
In[14]:temp=a[i,max(0,j-2):j+3]
In[15]:温度
Out[15]:数组([1.80637901,4.3168534,3.60375159,1.35948513])
在[16]中:a=np.delete(temp,len(temp)//2-1)
在[17]中:a
Out[17]:数组([1.80637901,3.60375159,1.35948513])

a[1[0,2,3]]
同一行中的上一个和下一个元素?这不是切片语法,这就是我在这里写注释的原因。我认为这很有用。创建一个包含所需索引的列表,并使用np.take提取它们。。。。。。。。idx=[6,8,9]。np.take(a,idx)切片返回一个连续或规则间隔的块。您不能使用切片语法执行此选择。
a[1[0,2,3]]
?同一行中的上一个和下一个元素?这不是切片语法,这就是我在这里写注释的原因。我认为这很有用。创建一个包含所需索引的列表,并使用np.take提取它们。。。。。。。。idx=[6,8,9]。np.take(a,idx)切片返回一个连续或规则间隔的块。您不能使用切片语法进行选择。这比使用列表
a[1[0,2,3]]
进行简单索引要多得多<代码>np。删除不便宜。是的,在创建
temp
时有一个切片,但最终结果不是
视图。但是
[0,2,3]
不是硬编码吗?这在不同的情况下不起作用(在我的示例中,
j
不同)。这比简单的列表索引,
a[1[
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])