GVKun编程网logo

如何将numpy 2D数组与numpy 1D数组相乘?(numpy数组组合)

9

在这篇文章中,我们将为您详细介绍如何将numpy2D数组与numpy1D数组相乘?的内容,并且讨论关于numpy数组组合的相关问题。此外,我们还会涉及一些关于numpy将2D数组与1D数组连接、num

在这篇文章中,我们将为您详细介绍如何将numpy 2D数组与numpy 1D数组相乘?的内容,并且讨论关于numpy数组组合的相关问题。此外,我们还会涉及一些关于numpy将2D数组与1D数组连接、numpy:索引3D数组,将最后一个轴的索引存储在2D数组中、Python Numpy 2D数组索引、python – 2D数组每列的外积,形成一个3D数组 – NumPy的知识,以帮助您更全面地了解这个主题。

本文目录一览:

如何将numpy 2D数组与numpy 1D数组相乘?(numpy数组组合)

如何将numpy 2D数组与numpy 1D数组相乘?(numpy数组组合)

两个数组:

a = numpy.array([[2,3,2],[5,6,1]])b = numpy.array([3,5])c = a * b

我想要的是:

c = [[6,9,6],     [25,30,5]]

但是,我收到此错误:

ValueError: operands could not be broadcast together with shapes (2,3) (2)

如何 nD数组与1D数组 相乘 ,在哪里len(1D-array) == len(nD array)

答案1

小编典典

您需要将数组b转换为(2,1)形状数组,使用None或numpy.newaxis在索引元组中:

import numpya = numpy.array([[2,3,2],[5,6,1]])b = numpy.array([3,5])c = a * b[:, None]

这是文件。

numpy将2D数组与1D数组连接

numpy将2D数组与1D数组连接

我正在尝试连接4个数组,一个1D形状的数组(78427,)和3个2D形状的数组(78427,375/81/103)。基本上,这是4个数组,具有78427个图像的特征,其中1D数组每个图像仅具有1个值。

我尝试串联数组,如下所示:

>>> print X_Cscores.shape
(78427,375)
>>> print X_Mscores.shape
(78427,81)
>>> print X_Tscores.shape
(78427,103)
>>> print X_Yscores.shape
(78427,)
>>> np.concatenate((X_Cscores,X_Mscores,X_Tscores,X_Yscores),axis=1)

这将导致以下错误:

追溯(最近一次调用):文件“”,第1行,在ValueError中:所有输入数组的维数必须相同

问题似乎是一维数组,但是我真的看不出来为什么(它也有78427个值)。我试图在连接它之前转置1D数组,但是那也不起作用。

任何有关连接这些数组的正确方法的帮助将不胜感激!

numpy:索引3D数组,将最后一个轴的索引存储在2D数组中

numpy:索引3D数组,将最后一个轴的索引存储在2D数组中

我有一个ndarrayshape(z,y,x)含值。我想这个指数阵列的另一个ndarrayshape(y,x)包含我感兴趣的值的z-
index的。

import numpy as np
val_arr = np.arange(27).reshape(3,3,3)
z_indices = np.array([[1,2],[0,1],[2,1]])

由于我的数组很大,因此我尝试使用它np.take来避免不必要的数组副本,但无法用它来索引3维数组。

如何索引val_arrz_indices在所需的z轴位置获得值?预期结果将是:

result_arr = np.array([[9,1,20],[3,4,14],[24,7,17]])

Python Numpy 2D数组索引

Python Numpy 2D数组索引

我对python和numpy很陌生。请问有人可以帮助我了解如何对用作索引的某些数组进行索引。我有以下六个2D阵列-

array([[2, 0],   [3, 0],   [3, 1],   [5, 0],   [5, 1],   [5, 2]])

我想将这些数组用作索引,并将值10放入新的空矩阵的相应索引中。输出应如下所示:

array([[ 0,  0,  0],   [ 0,  0,  0],   [10,  0,  0],   [10, 10,  0],   [ 0,  0,  0],   [10, 10, 10]])

到目前为止,我已经尝试过

    from numpy import*    a = array([[2,0],[3,0],[3,1],[5,0],[5,1],[5,2]])    b = zeros((6,3),dtype =''int32'')    b[a] = 10

但这给了我错误的输出。任何帮助请。

答案1

小编典典
In [1]: import numpy as npIn [2]: a = np.array([[2,0],[3,0],[3,1],[5,0],[5,1],[5,2]])In [3]: b = np.zeros((6,3), dtype=''int32'')In [4]: b[a[:,0], a[:,1]] = 10In [5]: bOut[5]: array([[ 0,  0,  0],       [ 0,  0,  0],       [10,  0,  0],       [10, 10,  0],       [ 0,  0,  0],       [10, 10, 10]])

工作原理:

如果您在工作分配中b使用 两个 numpy数组建立索引,

b[x, y] = z

然后认为NumPy的作为过的各元件同时移动x和中的每个元素y和中的每个元素z(我们称它们xvalyvalzval),并分配至b
[XVAL,利用yval]的值zval。当z为常数时,“z每次移动仅返回相同的值。

这就是我们想要的,与x作为第一列ay是第二列a。因此,选择x = a[:, 0]y = a[:, 1]

b[a[:,0], a[:,1]] = 10

为什么b[a] = 10不起作用

当你写b[a],认为NumPy的,如通过的每一个元素移动在创造一个新的数组a,(我们称之为每一个idx)和新的阵列中放置的价值b[idx]在的位置idxa

idx是中的值a。所以它是一个int32。 b形状为(6,3),b[idx]一行b形状为(3,)。例如,何时idx

In [37]: a[1,1]Out[37]: 0

b[a[1,1]]

In [38]: b[a[1,1]]Out[38]: array([0, 0, 0])

所以

In [33]: b[a].shapeOut[33]: (6, 2, 3)

因此,让我们再次重申:NumPy的是通过创建的每个元素移动在新的阵列a和新阵列中放置的价值b[idx]在的位置idxa。随着idx移动a,将创建形状为(6,2)的数组。但是由于b[idx]形状本身为(3,),因此在(6,2)形数组中的每个位置都放置了(3,)形值。结果是形状(6,2,3)的数组。

现在,当您进行类似

b[a] = 10

b[a]创建具有值的形状(6,2,3)的临时数组,然后执行分配。由于10是常数,因此此赋值将值10放置在(6,2,3)形数组中的每个位置。然后,将临时数组中的值重新分配给b。请参阅参考文档。因此,将(6,2,3)形数组中的值复制回(6,3)形b数组中。值彼此覆盖。但要点是您没有获得所需的任务。

python – 2D数组每列的外积,形成一个3D数组 – NumPy

python – 2D数组每列的外积,形成一个3D数组 – NumPy

令X为M×N矩阵.将xi表示为X的第i列.我想创建由M×M矩阵xi.dot(xi.T)组成的3维N×M×M阵列.

我怎么能用numpy最优雅地做到这一点?是否可以仅使用矩阵运算,没有循环?

解决方法

broadcasting的一种方法 –
X.T[:,:,None]*X.T[:,None]

另一个有广播和交换轴后 –

(X[:,None,:]*X).swapaxes(0,2)

另一个广播和之后的多维转置 –

(X[:,:]*X).T

使用np.einsum的另一种方法,如果从循环代码转换,可能就迭代器而言更直观的思考 –

np.einsum('ij,kj->jik',X,X)

所有这些方法的基本思想是我们展开最后一个轴,使元素相乘相互保持第一轴对齐.我们通过将X扩展到两个3D阵列版本来实现这种相互对立的过程.

关于如何将numpy 2D数组与numpy 1D数组相乘?numpy数组组合的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于numpy将2D数组与1D数组连接、numpy:索引3D数组,将最后一个轴的索引存储在2D数组中、Python Numpy 2D数组索引、python – 2D数组每列的外积,形成一个3D数组 – NumPy的相关知识,请在本站寻找。

本文标签: