[英]What's the most concise way to get a newline-separated string representation of a numpy array?
[英]Most concise way to get complementary slice in numpy
給出numpy.array
切片的補充的最簡潔(緊湊)方法是什么? 與之前的帖子相反,我沒有考慮速度,但考慮到易用性/可讀性/通用性。
以數組A=np.array([1,2,3,4,5,6])
。 我正在尋找A[start:stop]
的補碼,例如,對於A[2:4]
的補碼,這將是"comp of A[2:4]"=array([1,2,3,6])
。 我正在尋找一種無論內容類型如何都有效的解決方案。 所以 A 也可以包含數組, str 並且理論上原則上可以包含正常 [start:stop] 切片操作也適用的任何維度。
在不聲明一般性的情況下,這就是我目前使用的:
def comp(A,start,stop):
if A.ndim == 1:
out = np.hstack((A[0:start],A[stop:]))
else:
out = np.vstack((A[0:start],A[stop:]))
return out
這是使用np.r_
生成這些索引然后索引到輸入數組的一種簡潔方法 -
A[np.r_[:start,stop:len(A)]]
@Divakar
提出的r_
解決方案是一個簡潔的numpy
解決方案,但它不會推廣到其他類。
In [195]: np.r_[0:2,4:6]
Out[195]: array([0, 1, 4, 5])
它生成一個你想要保留的索引列表,本質上是concatenate
np.arange(0,2)
和np.arange(4,6)
。 使用列表進行advanced indexing
是advanced indexing
,它會生成一個副本。
您不能使用這樣的列表來索引 Python list
或string
。 它們只能索引元素。 要在列表中使用它:
[alist[i] for i in np.r_[0:2,4:6]]
但是列表有一個刪除語法alist[2:4]=[]
字符串沒有那個,因為它們是不可變的。
一種更通用的方法是連接/連接兩個切片
np.concatenate([arr[0:2], arr[4:6]])
alist[0:2] + alist[4:6]
astr[0:2] + astr[4:6]
np.concatenate([arr[:, 0:2], arr[:, 4:6]], axis=1)
您的hstack/vstack
代碼可以與
np.concatenate((A[0:start],A[stop:]),axis=0)
因為您在這兩種情況下都加入了第一維上的切片。
二維切片的補充:
arr[2:4, 2:4]
不能是二維數組。 每行留下不同數量的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.