用numpy生成高大的数组

时间:2017-03-15 13:31:11

标签: python arrays numpy

我是python和numpy的新手(我更习惯于R)并且一直在玩创建数组并想要创建一个高大的数组,其中第一列只是一个定制的范围递增,第二列是0到1之间的unif随机。

我已经提出了以下内容,但它看起来非常笨重而且不是特别易读。是否有更有效的方法在一条线上实现相同的结果?

import numpy as np

1stcol = np.array(np.arange(1,20,0.5), ndmin=2)
2ndcol = np.array(np.random.uniform(0,1,np.shape(d)[1]), ndmin=2)
tallmat = np.transpose(np.concatenate((d,e),axis=0))

2 个答案:

答案 0 :(得分:3)

考虑到两列要作为两列来堆叠以获取 tall 数组,以下是np.vstacknp.row_stack和{{1}的几种方法} -

np.dstack

或者,我们可以从np.vstack((d,e)).T np.row_stack((d,e)).T np.dstack((d,e))[0] 数组开始,最后用1D堆栈,就像这样 -

np.column_stack

答案 1 :(得分:1)

1stcol不是有效的变量名称。

就效率而言,这很难被击败。

In [159]: d = np.array(np.arange(1,20,0.5), ndmin=2)
     ...: e = np.array(np.random.uniform(0,1,np.shape(d)[1]), ndmin=2)
     ...: tallmat = np.transpose(np.concatenate((d,e),axis=0))

de的简单表达式为:

d = np.arange(1,20,0.5)[None,:]
e = np.random.uniform(0,1,d.shape)

您可以构建更简单的1d数组

In [160]: a = np.arange(1,20,0.5)
     ...: b = np.random.uniform(0,1,np.shape(d)[1])

但任何连接它们的函数都必须以其他方式扩展尺寸和/或转置。所以整体工作将是类似的。您的解决方案虽然“笨拙”,却展示了连接所需的维度问题的相关知识。

使用1d数组,这些都可以正常工作

np.column_stack((a,b))
np.c_[a,b]
np.stack((a,b),axis=-1)
np.array((a,b).T

我对de的简单表达式提出了另一种结构 - 从一开始就使输入(N,1)正确:

In [171]: d = np.arange(1,20,0.5)[:,None]
In [172]: e = np.random.uniform(0,1,d.shape)
In [173]: tallmat = np.concatenate((d,e), axis=1)