来自Matlab/Octave的背景,我一直在努力学习numpy。一件让我一次又一次地被绊倒的事情是向量和多维数组之间的区别。对于这个问题,我会给出一个具体的问题,但是如果有人也能解释一下numpy中一维数组背后的更一般的图片,为什么你首先想要它们,如何避免在混合单维数组和多维数组时遇到麻烦,等等,我会非常感激。总之,问题是:
我有一个叫做X的二维数组:
X = numpy.arange(10).reshape(2,5)
我想把X的最后一列存储成另一个二维数组(也就是一个列向量),叫做Y。我唯一能想到的方法是:
Y = numpy.atleast_2d(X[:,4]).T
但我不喜欢这样有几个
假设我有一个NumPy N维数组a和一个函数f(a),它返回a的任何复杂视图v,还有一个与v形状相同的数组b。 将b分配给v的最简单方法是什么?它们都可以是多维的。 向函数返回值赋值的最简单尝试失败,错误如下:SyntaxError: can't assign to function call import numpy as np
a, b = np.arange(10), np.arange(2)
a[2:4] = b # Working
f = lambda a: a[2:4] # Returns any view of a
f(a) = b # Not working, syn
我有一个2D数组和两个掩码,一个用于列,另一个用于行。如果我尝试简单地执行data[row_mask,col_mask],那么我在说shape mismatch: indexing arrays could not be broadcast together with shapes ...时会出错。另一方面,data[row_mask][:,col_mask]可以工作,但不那么漂亮。为什么它期望索引数组的形状是相同的?
下面是一个具体的例子:
import numpy as np
data = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
row