Python-从列表创建数组?

时间:2018-07-06 14:52:48

标签: python

import numpy as np
    means = [[2, 2], [8, 3], [3, 6]]
    cov = [[1, 0], [0, 1]]
    N = 20
    X0 = np.random.multivariate_normal(means[0], cov, N)
    X1 = np.random.multivariate_normal(means[1], cov, N)
    X2 = np.random.multivariate_normal(means[2], cov, N)
    X = np.concatenate((X0, X1, X2), axis = 0)

    Y = X[np.random.choice(X.shape[0], 3, replace=False)]
    A = [X[np.random.choice(X.shape[0], 3, replace=False)]]
    B = A[-1]

    print(Y), print(type(Y))
    print(A), print(type(A))
    print(B), print(type(B))

     >>> 
    [[3.58758421 6.83484817]
     [9.10469916 4.23009063]
     [7.24996633 4.0524614 ]]
    <class 'numpy.ndarray'>
    [array([[3.22836848, 7.06719777],
           [2.33102712, 0.96966102],
           [2.06576315, 4.84061538]])]
    <class 'list'>
    [[3.22836848 7.06719777]
     [2.33102712 0.96966102]
     [2.06576315 4.84061538]]
    <class 'numpy.ndarray'>

能帮我解释一下

  1. X[np.random.choice(X.shape[0], 3, replace=False)] mean是什么? np.random.choice()是否应该返回一个新数组?
  2. 为什么Y和A返回不同的结果?
  3. B是否应该返回列表中的最后一个元素?

谢谢!

2 个答案:

答案 0 :(得分:0)

  1. 您可以在评论中找到scipy和numpy here的文档。
  2. Y是numpy.ndarray对象,而A是list对象。这是由于创建A时的[brackets]所致。A(列表)中的第一个也是唯一的元素是Y(数组)。
  3. B确实返回列表中的最后一个元素。列表中的最后一个元素是数组对象。

答案 1 :(得分:0)

我建议阅读numpy.random.choice上的this documentation,以确切了解该函数的工作方式。在这种情况下,它实际上是从numpy数组X中选择3个随机索引。

Y = X[np.random.choice(X.shape[0], 3, replace=False)]

这行可以这样想:从X中选择3个随机值,并创建一个包含这些值的新numpy数组,并将其命名为Y。

A = [X[np.random.choice(X.shape[0], 3, replace=False)]]

然后,定义一个常规的python列表。这是一个只有一个元素的列表。该元素是X的3个随机值组成的一个numpy数组。关键概念是A仅具有一个元素。但是,那个元素恰好是一个数组,它本身有3个元素。

B = A[-1]

最后,您是对的,它返回A的最后一个元素,并将其称为B。从上面,我们知道A只有一个元素,即3个元素的数组。因此,该数组是列表A的最后一个元素。

主要收获是python允许您使用列表列表,numpy数组列表等。