使用NumPy生成高维数组

4

我刚开始学习Python和Numpy(我更习惯使用R),一直在尝试创建数组,现在我想创建一个高维数组,其中第一列是具有自定义增量的范围,第二列是0到1之间的均匀随机数。

我已经写出了下面的代码,但它看起来非常笨拙,不太易读。是否有更有效的方法在一行中实现相同的结果?

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))

或者将输入数组的额外维度去掉,使其成为一维数组,并在需要时使用快捷方式np.c_[a, b],有时比*stack选项更容易记忆。 - NaN
2个回答

3

给定要堆叠为两列以获取“高”数组的两列,这里有一些使用np.vstacknp.row_stacknp.dstack的方法-

np.vstack((d,e)).T
np.row_stack((d,e)).T
np.dstack((d,e))[0]

另外,我们也可以从 1D 数组开始,并在最后使用 np.column_stack 进行堆叠,如下所示 -

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

非常感谢,我之前不知道这些 - 我会试一下! - intransit

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)

您可以构建更简单的一维数组。
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)

作为一名对该语言不熟悉的新手,这是我所期望的全面分析。试图了解最佳实践等方面的情况。非常感谢! - intransit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接