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