繁体   English   中英

从 Python 中其他数组的部分创建一个 Numpy 数组

[英]Create a Numpy array from parts of other arrays in Python

编辑

所以我现在才明白 Python 和 Numpy 的多态性做得不是很好。 给定相同的数据,在大多数功能可以使用它之前,必须将其放入正确的形式。 因此,期望 Python 能够“单行”处理某些事情超出了它的能力。

只是为了比较,MATLAB 的多态性也不是很好,但它不太引人注目,因为默认情况下它将所有数值数据保存为 2D 数组,因此大多数函数将处理大多数数据 - 使其变得更容易

编辑

我对 Python 还很陌生,正在努力从现有数组中创建新数组:

在 MATLAB 中,以下工作用于从其他列向量创建列向量:

a = [b(5:6); c(N:M); d(1:P); e(Q)]

具有很大的计算灵活性(例如 Q 可以是一个向量)。

在 Python 中,我找不到一个很好的命令来将多个 1D NumPy 数组添加在一起,而且它似乎有很多关于单个值的问题,因为它将它们从 NumPy 数组更改为其他格式,为什么?!

谁能给我一行代码来执行上述操作? 很高兴看到 - 到目前为止,我所拥有的只是检查索引变量(N,M,P,Q)的行和行,以及到处都可以尝试的 np.array(..)保持相同的数据类型。

我试过 np.append 但这不适用于多个向量(我可以嵌套它们但看起来很丑,尤其是如果我需要添加许多数组)并且 np.concatenate 抱怨某些东西是 0 维的,我不完全不明白。

concatenate一堆一维数组没有问题:

In [52]: np.concatenate([np.array([1,2,3]), np.ones((2,)), np.array([1])])
Out[52]: array([1., 2., 3., 1., 1., 1.])

如果一个参数是标量:

In [53]: np.concatenate([np.array([1,2,3]), np.ones((2,)), 1])
Traceback (most recent call last):
  File "<ipython-input-53-51b00c09f677>", line 1, in <module>
    np.concatenate([np.array([1,2,3]), np.ones((2,)), 1])
  File "<__array_function__ internals>", line 5, in concatenate
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 2 has 0 dimension(s)

它从最后一个数组

In [57]: np.array(1)
Out[57]: array(1)

但那是一个 0d 数组。 在 MATLAB 中,这将是 2d - 一切都是 2d,没有真正的标量。 请记住, numpy在 python 中工作,它具有标量和列表。 MATLAB 一直是矩阵......

numpy 数组也可以是 0d 或 1d。 没有人为的 2d 下界。 它是一种通用的数组语言,而不仅仅是矩阵。 在 MATLAB 中,甚至 3d 也是对原始 2d 的调整。

hstack添加了一个调整以确保所有参数至少为 1d:

In [54]: np.hstack([np.array([1,2,3]), np.ones((2,)), 1])
Out[54]: array([1., 2., 3., 1., 1., 1.])

即使在 MATLAB/Octave 中,尺寸不匹配也会产生问题:

>> a = [3:5; [1,2,3]]
a =    
   3   4   5
   1   2   3

>> a = [3:5; [1,2,3]; 4]
error: vertical dimensions mismatch (2x3 vs 1x1)

>> a = [3:5; [1,2,3,4]]
error: vertical dimensions mismatch (1x3 vs 1x4)
>> a = [3:5, [1,2,3,4]]
a =    
   3   4   5   1   2   3   4

>> a = [3:5, [1,2,3,4],5]
a =
   3   4   5   1   2   3   4   5

你会想看看 np.concatenate 它采用数组和轴的序列来连接它们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM