我一直被告知python的本机追加是一个缓慢的函数,应该在for循环中避免。然而,经过几次小测试之后,我发现在使用for循环迭代它时,它的性能比numpy数组要差得多:
第一次测试数组/列表构造
附加python本机列表
def pythonAppend(n):
x = []
for i in range(n):
x.append(i)
return x
%timeit pythonAppend(1000000)
Numpy分配数组然后访问
def numpyConstruct(n):
x = np.zeros(n)
我目前正在使用PyTorch框架,并试图理解外部代码。我有一个索引问题,想打印一个列表的形状。
这样做的唯一方法(据Google告诉我)是将列表转换为numpy数组,然后使用numpy.ndarray.shape()获取形状。
但是试图将我的列表转换成数组,我得到了一个ValueError: only one element tensors can be converted to Python scalars。
我的列表是一个转换的PyTorch张量(list(pytorchTensor)),看起来有点像这样:
[
tensor([[-0.2781, -0.2567, -0.2353, ..
我正在读取CSV文件的列表,并且总是将数据附加到数组中的新列。我目前的解决方案类似于以下内容: import numpy as np
# Random generator and paths for the sake of reproducibility
fake_read_csv = lambda path: np.random.random(5)
paths = ['a','b','c','d']
first_iteration=True
for path in paths:
print(f'Read
在这个问题的末尾看到了重要的澄清.
我正在使用numpy来加速一些经纬度坐标的处理。不幸的是,我的numpy“优化”使我的代码运行速度比不使用numpy的代码慢5倍。
瓶颈似乎在于用我的数据填充numpy数组,然后在完成数学转换之后提取出这些数据。为了填充数组,我基本上有一个循环,类似于:
point_list = GetMyPoints() # returns a long list of ( lon, lat ) coordinate pairs
n = len( point_list )
point_buffer = numpy.empty( ( n, 2 ), numpy.float3
问题是
如何将数据从N x N x N x... h5py数据集复制到1D标准Python列表,而不对数据进行中间复制?
我可以想出几种不同的方法来用中间拷贝来完成这个任务。例如:
import h5py
import numpy as np
# initialize list, put some initial data in it
myList = ['foo']
# open up an h5py dataset from a file on disk
myFile = h5py.File('/path-to-my-data', 'r'
我正在尝试做我认为应该很简单的事情:
我做了一个2D列表:
a = [[1,5],[2,6],[3,7]]
我想滑出第一个column并尝试:
1)
a[:,0]
...
TypeError: list indices must be integers or slices, not tuple
2)
a[:,0:1]
...
TypeError: list indices must be integers or slices, not tuple
3)
a[:][0]
[1, 5]
4)
a[0][:]
[1, 5]
5)明白了,但这是做这件事的方法吗?
aa[0] for aa in a
我遇到了一个问题,一些numpy数组不能使用cv.fromarray()转换为cvMat。似乎每当numpy数组被转置时,问题就会发生。
import numpy as np
import cv
# This works fine:
b = np.arange(6).reshape(2,3).astype('float32')
B = cv.fromarray(b)
print(cv.GetSize(B))
# But this produces an error:
a = np.arange(6).reshape(3,2).astype('float32'
我遇到了函数ascontiguousarray()的问题,它在NumPy 1.11.1和1.13.1中返回不同的步长。
要重现的代码(Ubuntu 16.04、Python 2.7.12):
import os
import numpy as np
x = np.array([[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16]],dtype='uint32')
x = x.T
x = np.ascontiguousarray(x)
print(x.strides)
在NumPy 1.11
我想从许多样本图像中读取,并制作2Dnumpy数组,行"i“对应于第i个样本,列j对应图像的第j个像素( 12*13图像的所有像素由156个数字的列表保存)
import numpy as np
images = np.array([])
for Letter in "ABCDEFGHIJKLMNO":
im = Image.open("ABCDEFGHIJKLMNO\\16\\"+Letter+".bmp")
sampleimage = list(im.getdata())
images = np.append(
将numpy.float64类型的元素列表转换为float类型的最快方法是什么?我目前正在结合float()使用简单的for loop迭代。
我偶然发现了这篇文章:,然而我的问题不是如何在python中转换类型,而是更具体地说,如何在python中以最快的方式最好地将一种类型的整个列表转换为另一种类型(即在本例中是numpy.float64 to float)。我希望有一些秘密的蟒蛇机器,我没有遇到过,可以一次完成所有的事情:)
编写python程序添加列表,第一个列表是10*3*11列表(3维),第二个列表也是10*3*11列表,所有元素都为0,添加它们,使用numpy:
data_split_count = 10
cluster_number = 3
total_center_list = [[[[0] for i in range(11)] for j in range(cluster_number)] for kj in range(data_split_count)]
print("1 len total center list")
print(len(total_center_list))
我有一个试图在循环中访问的子图列表:
index=[5,3,4,1,1,3,4,2,3,4,2,2,3,3,2,4]
subgraph=[[subgraph1],[subgraph2],[subgraph3],[subgraph4],[subgraph5]]
for i in range(len(index)):
for j in range(i+1,len(index)):
if index[j]==index[i]
continue
testgraphi=copy.copy(subgraph[index[