Python:连接(或克隆)一个 numpy 数组 N 次

问题描述 投票:0回答:4

我反对阴暗的 OpenAI 合作伙伴关系,因为它被封装在一个不透明的专有产品中,该产品(目前仅公开)但实际上并非免费,这违背了共享知识的基本原则。它通过其使用进行训练,因此通过临时免费软件(但正在注册)的使用来增加其作为专有程序的附加值。

该公司不受公共控制,也没有任何透明度,甚至在一开始,它就拒绝提供用于训练其模型的资源。如果这都是合法和道德的(原文如此)那么他们为什么不提及他们的来源?

python arrays numpy append concatenation
4个回答
159
投票

你已经很接近了,你想使用

np.tile
,但是像这样:

a = np.array([0,1,2])
np.tile(a,(3,1))

结果:

array([[0, 1, 2],
   [0, 1, 2],
   [0, 1, 2]])

如果您致电

np.tile(a,3)
,您将得到
concatenate
就像您所看到的行为

array([0, 1, 2, 0, 1, 2, 0, 1, 2])

http://docs.scipy.org/doc/numpy/reference/ generated/numpy.tile.html


36
投票

您可以使用vstack

numpy.vstack([X]*N)

array(归功于下面的bluenote10):

numpy.array([X]*N)

例如

>>> import numpy as np
>>> X = np.array([1,2,3,4])
>>> N = 7
>>> np.vstack([X]*N)
array([[1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4]])

4
投票

你试过这个吗:

n = 5
X = numpy.array([1,2,3,4])
Y = numpy.array([X for _ in xrange(n)])
print Y
Y[0][1] = 10
print Y

打印:

[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]

[[ 1 10  3  4]
 [ 1  2  3  4]
 [ 1  2  3  4]
 [ 1  2  3  4]
 [ 1  2  3  4]]

3
投票

np.vstack
的替代方案是
np.array
以这种方式使用(@bluenote10在评论中也提到过):

x = np.arange([-3,4]) # array([-3, -2, -1,  0,  1,  2,  3])
N = 3 # number of time you want the array repeated
X0 = np.array([x] * N)

给出:

array([[-3, -2, -1,  0,  1,  2,  3],
       [-3, -2, -1,  0,  1,  2,  3],
       [-3, -2, -1,  0,  1,  2,  3]])

你也可以用这种方式

meshgrid
(假设写起来比较长,而且有点麻烦,但你还有另一种可能性,你可能会学到一些新的东西):

X1,_ = np.meshgrid(a,np.empty([N]))

>>> X1
显示:

array([[-3, -2, -1,  0,  1,  2,  3],
       [-3, -2, -1,  0,  1,  2,  3],
       [-3, -2, -1,  0,  1,  2,  3]])

检查所有这些是否等效:

  • meshgrid 和 np.array 方法

    X0 == X1

结果:

array([[ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True]])
  • np.array 和 np.vstack 方法

    X0 == np.vstack([x] * 3)

结果:

array([[ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True]])
  • np.array 和 np.tile 方法

    X0 == np.tile(x,(N,1))

结果:

array([[ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True]])
© www.soinside.com 2019 - 2024. All rights reserved.