在这篇文章中,我们将为您详细介绍如何将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数组与1D数组连接
- numpy:索引3D数组,将最后一个轴的索引存储在2D数组中
- Python Numpy 2D数组索引
- python – 2D数组每列的外积,形成一个3D数组 – 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数组连接
我正在尝试连接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数组中
我有一个ndarray
的shape(z,y,x)
含值。我想这个指数阵列的另一个ndarray
的shape(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_arr
以z_indices
在所需的z轴位置获得值?预期结果将是:
result_arr = np.array([[9,1,20],[3,4,14],[24,7,17]])
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
(我们称它们xval
,yval
和zval
),并分配至b
[XVAL,利用yval]的值zval
。当z
为常数时,“z
每次移动仅返回相同的值。
这就是我们想要的,与x
作为第一列a
和y
是第二列a
。因此,选择x = a[:, 0]
和y = a[:, 1]
。
b[a[:,0], a[:,1]] = 10
为什么b[a] = 10
不起作用
当你写b[a]
,认为NumPy的,如通过的每一个元素移动在创造一个新的数组a
,(我们称之为每一个idx
)和新的阵列中放置的价值b[idx]
在的位置idx
中a
。
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]
在的位置idx
中a
。随着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
我怎么能用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的相关知识,请在本站寻找。
本文标签: