Python Numpy - 将Vector Numpy Array的元素读取为数值而不是Numpy Arrays

时间:2016-09-16 14:50:11

标签: python arrays numpy vector dereference

假设我有一个Numpy数组,其维度为nx1(n行,1列)。我对此的使用是使用Numpy将3D矢量实现为3x1矩阵,但应用程序可以扩展为nx1矢量矩阵:

In [0]: import numpy as np

In [1]: foo = np.array([ ['a11'], ['a21'], ['a31'], ..., ['an1'] ])

我希望能够通过解除引用一个值来访问数组的值。

In [2]: foo[0]
Out[2]: 'a11'

In [3]: foo[n]
Out[3]: 'an1'

但是,通过Numpy Arrays的一般格式化,Vector数组将被视为2D数组,需要2个值才能取消引用它:我必须使用foo[0][0]foo[0][n]来获取相同的价值观我可以使用np.transpose将Vector转置为一行,但语法继续生成一个2D Numpy数组,需要2个值才能取消引用:因此

In [4]: np.transpose(foo)[0] == foo[0][0]
Out[4]: array([ True, False, False], dtype=bool)

In [5]: np.transpose(foo)[0][0] == foo[0][0]
Out[5]: True

这将取消转置提供的任何优势。如何仅使用一个解除引用值来访问Vector Numpy Array的元素?

2 个答案:

答案 0 :(得分:0)

您可以使用numpy.ndarray.tolist()功能:

In [1]: foo = np.array([ ['a11'], ['a21'], ['a31'] ])
In [2]: foo.tolist()
Out[2]: [['an1'], ['a2n'], ['a3n']]

In [3]: foo.tolist()[0]
Out[3]: ['an1']

答案 1 :(得分:0)

您的foo是一个二维数组字符串:

In [354]: foo = np.array([ ['a11'], ['a21'], ['a31'], ['an1'] ])
In [355]: foo.shape
Out[355]: (4, 1)
In [356]: foo[0]   # selects a 'row'
Out[356]: 
array(['a11'], 
      dtype='<U3')
In [357]: foo[0,:]    # or more explicitly with the column :
Out[357]: 
array(['a11'], 
      dtype='<U3')
In [358]: foo[:,0]     # selects a column, results in a 1d array
Out[358]: 
array(['a11', 'a21', 'a31', 'an1'], 
      dtype='<U3')
In [359]: foo[0,0]     # select an element
Out[359]: 'a11'

转置仍然是2d,只是切换行和列:

In [360]: foo.T
Out[360]: 
array([['a11', 'a21', 'a31', 'an1']], 
      dtype='<U3')
In [361]: _.shape
Out[361]: (1, 4)      

Ravel(或flatten)将其转换为1d数组,只需一个索引即可访问。

In [362]: foo.ravel()[1]
Out[362]: 'a21'

关于矩阵乘法的讨论表明你的数组实际上不是字符串,但'a21'代表一个数组,或者是数字。它真的是一个二维数字数组,或者可能是一个3d数组吗?