gpt4 book ai didi

python - 强制 genfromtxt 输出为无向量

转载 作者:行者123 更新时间:2023-12-01 05:50:46 24 4
gpt4 key购买 nike

在只加载一列数据的情况下,有没有办法强制 genfromtxt 输出形状为:(xx, 1) 的数据?通常的形状是(xx,)。我的示例中的 xx 可以是任何整数。

更新:这是代码示例:

import numpy as np
a = np.zeros([1000, 10])
nbcols = 1
for ind in range(0, 10, nbcols)
a[:, ind : ind + nbcols] = np.genfromtxt('file_1000x10.csv', usecols = range(nbcols))

这段代码仅适用于 nbcols >= 2;假设 nbcols 是整数 c [1, 10]。有没有一种解决方案可以使其适用于 nbcols = 1 而无需添加 if 语句。

事实上,我对这篇文章的原始代码简化了太多,但这不会影响我的问题的答案。事实上,文件名是通过变量给出的,如下所示:

filename = 'file_1000x10_' + '%02d' % ind.astype(int) + '.csv'

因此,在 for 循环中的每次迭代中,np.genfromtxt 都会从另一个文件加载数据。

最佳答案

我认为诀窍是reshape(-1, nbcols)你从np.genfromtxt得到的东西,所以你的作业应该看起来像:

a[:, ind:ind + nbcols] = np.genfromtxt('file_1000x10.csv',
usecols = range(nbcols)).reshape(-1, nbcols)

另外一点,循环遍历 ind 并每次都读取文件是不必要的。您可以执行一些更高维度的巫术,如下所示:

import numpy as np
from StringIO import StringIO

def make_data(rows, cols) :
data = ((str(k + cols * j) for k in xrange(cols)) for j in xrange(rows))
data = '\n'.join(map(lambda x: ' '.join(x), data))
return StringIO(data)

def read_data(f, rows, cols, nbcols) :
a = np.zeros((rows, (cols + nbcols - 1) // nbcols, nbcols))
a[...] = np.genfromtxt(f, usecols=range(nbcols)).reshape(-1, 1, nbcols)
return a.reshape(rows, -1)[:, :cols]

>>> read_data(make_data(3, 6), 3, 6, 2)
array([[ 0., 1., 0., 1., 0., 1.],
[ 6., 7., 6., 7., 6., 7.],
[ 12., 13., 12., 13., 12., 13.]])
>>> read_data(make_data(3, 6), 3, 6, 1)
array([[ 0., 0., 0., 0., 0., 0.],
[ 6., 6., 6., 6., 6., 6.],
[ 12., 12., 12., 12., 12., 12.]])
>>> read_data(make_data(3, 6), 3, 6, 4)
array([[ 0., 1., 2., 3., 0., 1.],
[ 6., 7., 8., 9., 6., 7.],
[ 12., 13., 14., 15., 12., 13.]])
<小时/>

原始答案您可以使用以下方法将大小为 1 的额外维度添加到 your_array 中:

your_array.reshape(your_array.shape + (1,))

或同等内容

your_array.reshape(-1, 1)

同样可以实现

your_array[..., np.newaxis]

或同等内容

your_array[..., None]

关于python - 强制 genfromtxt 输出为无向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com