Python 强制genfromtxt输出为无向量

Python 强制genfromtxt输出为无向量,python,numpy,genfromtxt,Python,Numpy,Genfromtxt,是否有一种方法可以强制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', us

是否有一种方法可以强制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]。 是否有一种解决方案可以使其在不添加if语句的情况下适用于nbcols=1

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

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

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

我认为关键在于
重塑(-1,nbcols)
您从
np.genfromtxt
中获得的内容,因此您的赋值应该如下所示:

a[:, ind:ind + nbcols] = np.genfromtxt('file_1000x10.csv',
                                       usecols = range(nbcols)).reshape(-1, nbcols)
另外,在
ind
上循环并每次读取文件是不必要的。你可以做一些更高维度的伏都教,如下所示:

将numpy导入为np
从StringIO导入StringIO
def make_数据(行、列):
数据=((str(k+cols*j)表示xrange中的k(cols))表示xrange中的j(行))
数据='\n'.连接(映射(lambda x:''。连接(x),数据))
返回字符串IO(数据)
def读取数据(f、行、列、nbcols):
a=np.zero((行,(cols+nbcols-1)//nbcols,nbcols))
a[…]=np.genfromtxt(f,usecols=range(nbcols))。重塑(-1,1,nbcols)
返回a.reforme(行,-1)[:,:cols]
>>>读取数据(生成数据(3,6,3,6,2)
数组([[0,1,0,1,0,1,0,1.]),
[  6.,   7.,   6.,   7.,   6.,   7.],
[ 12.,  13.,  12.,  13.,  12.,  13.]])
>>>读取数据(生成数据(3,6,3,6,1)
数组([[0,0,0,0,0,0,0,0.]),
[  6.,   6.,   6.,   6.,   6.,   6.],
[ 12.,  12.,  12.,  12.,  12.,  12.]])
>>>读取数据(生成数据(3,6,3,6,4)
数组([[0,1,2,3,0,1.],
[  6.,   7.,   8.,   9.,   6.,   7.],
[ 12.,  13.,  14.,  15.,  12.,  13.]])

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

your_array.reshape(your_array.shape + (1,))
或同等品

your_array.reshape(-1, 1)
your_array[..., None]
同样的道理也可以通过

your_array[..., np.newaxis]
或同等品

your_array.reshape(-1, 1)
your_array[..., None]

如果您可以使用
loadtxt
而不是
genfromtxt
,并且如果您使用的是1.6.0版或更高版本的numpy,
ndmin
参数允许您指定数组的(最小)维数。例如:

a[:, ind : ind + nbcols] = np.loadtxt('file_1000x10.csv', usecols=range(nbcols), ndmin=2)