将numpy数组的元组转换为numpy数组

bnl4lu3b  于 2023-08-05  发布在  其他
关注(0)|答案(3)|浏览(116)

我有一个numpy数组的元组:


的数据
我一直在尝试将它转换为2D(7x1800)numpy数组,现在似乎找不到正确的代码来转换它。
请帮助我,如果有一个命令,我可以使用它。
尝试将它从元组转换为列表,然后是numpy数组,但无济于事。

bfnvny8b

bfnvny8b1#

IIUC,可以使用np.vstack。请考虑以下示例:

tpl = np.array([1, 2, 3]), np.array([4, 5, 6]), np.array([7, 8, 9])

print(tpl)

字符串
印刷品:

(array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9]))


然后:

print(np.vstack(tpl))


印刷品:

[[1 2 3]
 [4 5 6]
 [7 8 9]]

92vpleto

92vpleto2#

重复我在评论中所说的,只需将np.array应用于tuple即可完成这项工作

t = (np.array([1, 2, 3]), np.array([4, 5, 6]))
np.array(t)

字符串
输出量:

array([[1, 2, 3],
       [4, 5, 6]])


我现在没有时间自己测试效率,所以引用评论中的jared,稍后会回到这里
np.array(t)更有效(即比np.vstack(t)

ercv8c1e

ercv8c1e3#

我对三个主要选项进行了一些性能测试:np.vstacknp.arraynp.stack。正如您在下面所看到的,差异并不显著,但是np.array始终比其余的快,尽管随着数组数量的增加,差值会减小。


的数据
重现分析的代码:

import numpy as np
import perfplot
import matplotlib.pyplot as plt

def method1(data):
    return np.vstack(data)

def method2(data):
    return np.array(data)

def method3(data):
    return np.stack(data)

rng = np.random.default_rng(42)
M = 1800
perfplot.show(
    setup=lambda N: [rng.random(M) for _ in range(N)],
    kernels=[
        method1,
        method2,
        method3
    ],
    labels=["vstack", "array", "stack"],
    n_range=[2**k for k in range(2,15)],
    xlabel="len(data)",
)

fig = plt.gcf()
fig.tight_layout()
fig.show()

字符串

相关问题