假设我有一个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的元素?
答案 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数组吗?