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

nlejzf6q  于 2023-11-18  发布在  Python
关注(0)|答案(3)|浏览(111)

编辑

所以我现在才明白,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维的,我一点也不明白。

lyr7nygr

lyr7nygr1#

concatenate对于一堆1d数组没有问题:

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)


但这是一个0 d数组。在MATLAB中,这将是2d的-一切都是2d的,没有真正的标量。记住,numpy在python中工作,python有标量和列表。MATLAB是矩阵一路向下...
numpy数组也可以是0 d或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/倍频程不匹配的尺寸给予的问题:

>> 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

1hdlvixo

1hdlvixo2#

你会想看看np.concatenate,它需要数组序列和轴来连接它们。

mctunoxg

mctunoxg3#

如果我理解正确的话,你有一个标量数组序列,你想把它们连接成一个序列,但是当你试图连接它们的时候,标量会带来麻烦。
你应该首先将所有标量转换成单例数组。然后连接它们。类似于:

foo = [[1, 2, 3], 5, [6, 7], 8]
foo2 = [np.array(item) if isinstance(item, list) else np.array([item]) for item in foo]
np.concatenate(foo)

字符串

相关问题