欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python处理重复的复制粘贴_如何将数组复制/重复N次到新数组中?

发布时间:2024/9/15 python 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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次到新数组中?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。