当我尝试
numpy.newaxis
Run Code Online (Sandbox Code Playgroud)
结果给出了一个2维的绘图框架,x轴从0到1.但是,当我尝试使用numpy.newaxis切片矢量时,
vector[0:4,]
[ 0.04965172 0.04979645 0.04994022 0.05008303]
vector[:, np.newaxis][0:4,]
[[ 0.04965172]
[ 0.04979645]
[ 0.04994022]
[ 0.05008303]]
Run Code Online (Sandbox Code Playgroud)
除了它将行向量更改为列向量之外,它是否相同?
一般来说,numpy.newaxis我们应该使用什么,在什么情况下使用它?
python numpy multidimensional-array numpy-broadcasting numpy-ndarray
我试图找到一些方法从Matlab中的3*(一个大数字)矩阵的每一列中减去一个3号向量.当然我可以使用一个循环,但我试图找到一些更有效的解决方案,有点像numpy广播.哦,我不能使用repmat,因为我没有足够的内存来使用它(因为它创建了另一个3*(一个大数字)矩阵)...
这可能吗?
我在Numpy中理解阵列广播的规则时遇到了一些麻烦.
显然,如果你在两个相同尺寸和形状的数组上执行逐元素乘法,一切都很好.此外,如果您将多维数组乘以标量,它就可以工作.我明白了.
但是如果你有两个不同形状的N维阵列,我不清楚我究竟是什么广播规则.本文档/教程解释说:为了进行广播,操作中两个数组的尾随轴的大小必须相同,或者其中一个必须为1.
好的,所以我假设它是尾随轴,它们指的N是M x N数组.那么,这意味着如果我尝试将两个二维数组(矩阵)乘以相同数量的列,它应该有效吗?除了它没有......
>>> from numpy import *
>>> A = array([[1,2],[3,4]])
>>> B = array([[2,3],[4,6],[6,9],[8,12]])
>>> print(A)
[[1 2]
[3 4]]
>>> print(B)
[[ 2 3]
[ 4 6]
[ 6 9]
[ 8 12]]
>>>
>>> A * B
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Run Code Online (Sandbox Code Playgroud)
由于双方 …
我正在使用python 2.7并尝试预测从1.00000000到3.0000000008的一些随机数据.我的阵列中有大约196个项目,我收到错误
ValueError: operands could not be broadcast together with shape (2) (50)
Run Code Online (Sandbox Code Playgroud)
我似乎无法独自解决这个问题.任何帮助或相关文档的链接将不胜感激.
这是我正在使用的代码生成此错误
nsample = 50
sig = 0.25
x1 = np.linspace(0,20, nsample)
X = np.c_[x1, np.sin(x1), (x1-5)**2, np.ones(nsample)]
beta = masterAverageList
y_true = ((X, beta))
y = y_true + sig * np.random.normal(size=nsample)
Run Code Online (Sandbox Code Playgroud) 在试图回答这个问题时,我遇到了一些好奇的东西(对我而言).
假设我想比较一系列形状(10,)和df形状(10,10):
np.random.seed(0)
my_ser = pd.Series(np.random.randint(0, 100, size=10))
my_df = pd.DataFrame(np.random.randint(0, 100, size=100).reshape(10,10))
my_ser > 10 * my_df
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,产生df(10,10)形状的矩阵.比较似乎是划线的.
但请考虑这种情况:
df = pd.DataFrame({'cell1':[0.006209, 0.344955, 0.004521, 0, 0.018931, 0.439725, 0.013195, 0.009045, 0, 0.02614, 0],
'cell2':[0.048043, 0.001077, 0,0.010393, 0.031546, 0.287264, 0.016732, 0.030291, 0.016236, 0.310639,0],
'cell3':[0,0,0.020238, 0, 0.03811, 0.579348, 0.005906, 0,0,0.068352, 0.030165],
'cell4':[0.016139, 0.009359, 0,0,0.025449, 0.47779, 0, 0.01282, 0.005107, 0.004846, 0],
'cell5': [0,0,0,0.012075, 0.031668, 0.520258, 0,0,0,2.728218, 0.013418]})
i = 0
df.iloc[:,i].shape
>(11,)
(10 * df.drop(df.columns[i], axis=1)).shape
>(11,4)
(df.iloc[:,i] > (10 * …Run Code Online (Sandbox Code Playgroud) 这个问题是我以高效的方式计算Vandermonde矩阵的答案 .
这是设置:
x = np.arange(5000) # an integer array
N = 4
Run Code Online (Sandbox Code Playgroud)
现在,我将以两种不同的方式计算Vandermonde矩阵:
m1 = (x ** np.arange(N)[:, None]).T
Run Code Online (Sandbox Code Playgroud)
和,
m2 = x[:, None] ** np.arange(N)
Run Code Online (Sandbox Code Playgroud)
完整性检查:
np.array_equal(m1, m2)
True
Run Code Online (Sandbox Code Playgroud)
这些方法是相同的,但它们的性能不是:
%timeit m1 = (x ** np.arange(N)[:, None]).T
42.7 µs ± 271 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit m2 = x[:, None] ** np.arange(N)
150 µs ± 995 ns per loop (mean ± std. dev. of 7 …Run Code Online (Sandbox Code Playgroud) 在numpy数组上,为什么我可以成功使用/ 2:
>>> a=np.array([2, 4, 6])
>>> a = a / 2
>>> a
array([ 1., 2., 3.])
Run Code Online (Sandbox Code Playgroud)
但我不能用a /= 2?
>>> a=np.array([2, 4, 6])
>>> a /= 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide
Run Code Online (Sandbox Code Playgroud)
我已经看过numpy Issue 6464,但是从阅读它并不理解,链接的发行版注意到这不起作用的原因.
有没有办法/=像预期的那样开始工作?
使用的numpy的可以减去的形状(3)阵列的优良广播规则v从一个形状(5,3)排列X以
X - v
Run Code Online (Sandbox Code Playgroud)
结果是一个shape(5,3)数组,其中每一行i都是差异X[i] - v.
有没有办法减去形状(n,3)数组w,X以便从w整个数组中减去每一行X而不显式使用循环?
在python中,假设我有一个大小为nxn的numpy方阵X,并且我有一个大小为n的向量a.numpy
很简单,我想执行X - a的广播减法,但我希望能够指定哪个维度,以便我可以指定减法沿轴0或轴1.
如何指定轴?
考虑数组 a
np.random.seed([3,1415])
a = np.random.randint(10, size=(5, 4))
a
array([[0, 2, 7, 3],
[8, 7, 0, 6],
[8, 6, 0, 2],
[0, 4, 9, 7],
[3, 2, 4, 3]])
Run Code Online (Sandbox Code Playgroud)
我可以创建b包含排列的排序来对每列进行排序.
b = a.argsort(0)
b
array([[0, 0, 1, 2],
[3, 4, 2, 0],
[4, 3, 4, 4],
[1, 2, 0, 1],
[2, 1, 3, 3]])
Run Code Online (Sandbox Code Playgroud)
我可以排序a与b
a[b, np.arange(a.shape[1])[None, :]]
array([[0, 2, 0, 2],
[0, 2, 0, 3],
[3, 4, 4, 3],
[8, 6, 7, 6],
[8, …Run Code Online (Sandbox Code Playgroud)