我是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))
答案 0 :(得分:3)
考虑到两列要作为两列来堆叠以获取 tall 数组,以下是np.vstack
,np.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))
d
和e
的简单表达式为:
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
我对d
和e
的简单表达式提出了另一种结构 - 从一开始就使输入(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)