标签: numpy-broadcasting

numpy.newaxis如何工作以及何时使用它?

当我尝试

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

155
推荐指数
4
解决办法
12万
查看次数

Matlab相当于Numpy广播?

我试图找到一些方法从Matlab中的3*(一个大数字)矩阵的每一列中减去一个3号向量.当然我可以使用一个循环,但我试图找到一些更有效的解决方案,有点像numpy广播.哦,我不能使用repmat,因为我没有足够的内存来使用它(因为它创建了另一个3*(一个大数字)矩阵)...

这可能吗?

python matlab numpy numpy-broadcasting

20
推荐指数
2
解决办法
9032
查看次数

Numpy阵列广播规则

我在Numpy中理解阵列广播的规则时遇到了一些麻烦.

显然,如果你在两个相同尺寸和形状的数组上执行逐元素乘法,一切都很好.此外,如果您将多维数组乘以标量,它就可以工作.我明白了.

但是如果你有两个不同形状的N维阵列,我不清楚我究竟是什么广播规则.本文档/教程解释说:为了进行广播,操作中两个数组的尾随轴的大小必须相同,或者其中一个必须为1.

好的,所以我假设它是尾随轴,它们指的NM 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 numpy numpy-broadcasting

20
推荐指数
1
解决办法
1万
查看次数

Numpy`ValueError:操作数不能与形状一起播放......`

我正在使用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)

python arrays numpy numpy-broadcasting

19
推荐指数
1
解决办法
9万
查看次数

Pandas什么时候默认播放系列和数据帧?

在试图回答这个问题时,我遇到了一些好奇的东西(对我而言).

假设我想比较一系列形状(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)

python pandas numpy-broadcasting

16
推荐指数
1
解决办法
221
查看次数

广播的NumPy算法 - 为什么一种方法的性能更高?

这个问题是我以高效的方式计算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)

python performance numpy linear-algebra numpy-broadcasting

15
推荐指数
1
解决办法
446
查看次数

不能在numpy数组上使用/ =

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,但是从阅读它并不理解,链接的发行版注意到这不起作用的原因.

有没有办法/=像预期的那样开始工作?

python arrays numpy numpy-broadcasting

12
推荐指数
2
解决办法
4227
查看次数

有效地减去不同形状的numpy数组

使用的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 arrays numpy vectorization numpy-broadcasting

9
推荐指数
1
解决办法
7341
查看次数

在python中沿特定轴广播操作

在python中,假设我有一个大小为nxn的numpy方阵X,并且我有一个大小为n的向量a.numpy

很简单,我想执行X - a的广播减法,但我希望能够指定哪个维度,以便我可以指定减法沿轴0或轴1.

如何指定轴?

python arrays numpy matrix numpy-broadcasting

9
推荐指数
2
解决办法
3685
查看次数

针对lexsort的2D数组广播1D数组:当考虑另一个向量时,用于独立地对每列进行排序的排列

考虑数组 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)

我可以排序ab

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)

python numpy pandas numpy-broadcasting

9
推荐指数
1
解决办法
199
查看次数