python处理重复的复制粘贴_如何将数组复制/重复N次到新数组中?
假設您要復制10次這些值,那么只需^{}10個數組:def repeat(arr, count):
return np.stack([arr for _ in range(count)], axis=0)
axis=0實際上是默認值,所以這里沒有必要,但我認為這樣可以更清楚地說明您在前面添加了新的軸。
事實上,這與stack的示例所做的幾乎相同:>>> arrays = [np.random.randn(3, 4) for _ in range(10)]
>>> np.stack(arrays, axis=0).shape
(10, 3, 4)
乍一看,您可能認為^{}或^{}更適合。
但是repeat是關于在現有軸上重復(或展平數組),因此您需要在之前或之后reshape。(這同樣有效,但我認為沒有那么簡單。)
而tile(假設您使用類似reps-的標量數組reps,它基本上是repeat)是關于在所有方向上填寫多維規范,這比您希望的這個簡單情況復雜得多。
所有這些選擇都將同樣有效。它們都會將數據復制10次以上,這是很昂貴的部分;任何內部處理、構建微型中間對象等的成本都無關緊要。提高速度的唯一方法是避免復制。你可能不想這么做。
但是,如果要共享10個副本中的行存儲,您可能需要^{}:def repeat(arr, count):
return np.broadcast_to(arr, (count,)+arr.shape)
注意broadcast_to實際上并不能保證它避免復制,只是它返回某種只讀視圖,其中“廣播數組的多個元素可能引用單個內存位置”。實際上,這會避免抄襲。如果出于某種原因(或者您想要一個可寫的視圖,這通常是一個糟糕的主意,但是也許您有一個很好的理由……)您確實需要保證這一點,那么您必須下拉到^{}:def repeat(arr, count):
shape = (count,) + arr.shape
strides = (0,) + arr.strides
return np.lib.stride_tricks.as_strided(
arr, shape=shape, strides=strides, writeable=False)
請注意,as_strided的一半文檔警告您可能不應該使用它,另一半則警告您絕對不應該將其用于可寫視圖,因此…在執行之前,請確保這是您想要的。
總結
以上是生活随笔為你收集整理的python处理重复的复制粘贴_如何将数组复制/重复N次到新数组中?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql生成uui mybatis_m
- 下一篇: python表单填写_Python3.4