python中的N维数组

时间:2017-10-31 13:21:10

标签: python numpy scipy

Python和Numpy的新手,尝试创建263维数组。 我需要很多机器学习模型的尺寸。 当然,一种方法是使用numpy.zeros或numpy.ones并编写如下代码:

x=np.zeros((1,1,1,1,1,1,1,1,1,1,1))   #and more 1,1,1,1

是否有更简单的方法来创建具有多个维度的数组?

4 个答案:

答案 0 :(得分:4)

您不需要263维度。如果每个维度只有2,那么您仍然拥有2 ** 263个元素,这些元素是:     14821387422376473014217086081112052205218558037201992197050570753012880593911808

你不能用这样的矩阵做任何事情:甚至没有在Google服务器上初始化。

您需要一个包含263个值的数组:

>>> np.zeros(263)
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.])

或具有26个M元素向量的矩阵(让我们说3):

>>> np.zeros((263, 3))
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       ...
       ...
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

有许多先进的研究中心对香草Numpy非常满意。必须使用少于32个维度似乎并不会对量子力学或机器学习造成太大影响。

答案 1 :(得分:0)

让我们从numpy文档开始,help(np.zeros)给出

zeros(shape, dtype=float, order='C')

Return a new array of given shape and type, filled with zeros.

Parameters
----------
shape : int or sequence of ints
    Shape of the new array, e.g., ``(2, 3)`` or ``2``.
...
Returns
-------
out : ndarray
    Array of zeros with the given shape, dtype, and order.
...

shape参数只是每个维度大小的列表(但您可能知道)。有很多方法可以在python中轻松创建这样的列表,一种快捷方式是

 np.zeros(np.ones(263, dtype=int))

但是,正如其他人所提到的,numpy对32维度有一定程度的限制。根据我的经验,通过保持索引数组显示每行所属的“维度”,您可以获得类似且更灵活的行为。

答案 2 :(得分:0)

最有可能的是,对于ML应用程序,您实际上并不想要这样:

shape = np.random.randint(1,10,(263,))
arr = np.zeros(shape)  # causes a ValueError anyway

你真的想要一些稀疏的东西

for i, value in enumerate(nonzero_values):
    arr[idx[i]] = value
在这种情况下,

idx(num_samples, 263)数组,nonzero_values(num_samples,)数组。

ML算法通常适用于这些idxvalue数组(通常称为XY),因为实际的数组会很大。

有时你需要一个热门的"您的维度数组,idx.shape == (num_samples, shape.sum())idx只包含0或1个值。但这仍然比任何类型的高维阵列都要小。

答案 3 :(得分:-1)

有一个名为 DimPy 的新包,它可以很容易地在 python 中创建多维数组。安装使用
pip install dimpy 使用示例

from dimpy import *
a=dim(4,5,6) # This is a 3 dimensional array of 4x5x6 elements. Use any number of dimensions within '( ) ' separated by comma
print(a)

默认情况下,每个元素都为零。要更改它,请使用 dfv(a, 'New value') 要将其表示为 numpy 样式数组,请使用 a=npary(a) 在此处查看更多详细信息:https://www.respt.in/p/python-package-dimpy.html?m=1