Python numpy数组'大小'让我很困惑
int
'b'是有意义的,因为它每行有3行4列 但'a'尺寸=(3,)怎么样?不应该是(1,3),因为它的1行和3列?
答案 0 :(得分:1)
不,形状(1,3)的numpy.ndarray
看起来像:
np.array([[1,2,3]])
考虑形状如何与索引相对应:
arr[0, ...] #First row
我还有三个选项,即:
arr[0,0]
arr[0,1]
arr[0,2]
尝试使用1维数组
答案 1 :(得分:1)
您应该反对将numpy
数组视为行和列的冲动,而是将它们视为具有维和形状。这是区分np.array
和np.matrix
的重要一点:
x = np.array([1, 2, 3])
print(x.ndim, x.shape) # 1 (3,)
y = np.matrix([1, 2, 3])
print(y.ndim, y.shape) # 2 (1, 3)
n -D数组只能使用 n 整数来表示其形状。因此,1-D数组仅使用1个整数来指定其形状。
实际上,在{3}和{ - 2}数组之间组合计算不是numpy
的问题,而且在语法上是干净的,因为在Python 3.5中引入了@
矩阵运算。因此,很少需要诉诸np.matrix
以满足预期行数和列数的冲动。
在极少数需要2维的情况下,你仍然可以使用numpy.array
进行一些操作:
a = np.array([1, 2, 3])[:, None] # equivalent to np.array([[1], [2], [3]])
print(a.ndim, a.shape) # 2 (3, 1)
b = np.array([[1, 2, 3]]) # equivalent to np.array([1, 2, 3])[:, None].T
print(b.ndim, b.shape) # 2 (1, 3)
答案 2 :(得分:0)
我认为你的意思是ndarray.shape
。在这种情况下,不需要混淆。从ndarray.shape
引用文档:
数组维度的元组。
In [21]: a.shape
Out[21]: (3,)
只返回一个形状元组。
a
这只是意味着(1,3)
是一个包含3个条目的一维数组。
如果形状元组将其返回为a
,则In [23]: a = a[np.newaxis, :]
In [24]: a.shape
Out[24]: (1, 3)
将成为2D数组。为此你需要使用:
b
由于数组In [22]: b.shape
Out[22]: (3, 4)
是2D,因此形状元组有两个条目。
{{1}}