Skip to content

Commit b6c86d0

Browse files
committed
Copy the contiguous rows if the element type allows it in from_vec2/3.
1 parent 2d042cb commit b6c86d0

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

src/array.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,9 +1106,14 @@ impl<T: Element> PyArray<T, Ix2> {
11061106
let array = Self::new(py, dims, false);
11071107
let mut data_ptr = array.data();
11081108
for v in v {
1109-
for v in v {
1110-
data_ptr.write(v.clone());
1111-
data_ptr = data_ptr.add(1);
1109+
if T::IS_COPY {
1110+
ptr::copy_nonoverlapping(v.as_ptr(), data_ptr, len2);
1111+
data_ptr = data_ptr.add(len2);
1112+
} else {
1113+
for v in v {
1114+
data_ptr.write(v.clone());
1115+
data_ptr = data_ptr.add(1);
1116+
}
11121117
}
11131118
}
11141119
Ok(array)
@@ -1157,9 +1162,14 @@ impl<T: Element> PyArray<T, Ix3> {
11571162
let mut data_ptr = array.data();
11581163
for v in v {
11591164
for v in v {
1160-
for v in v {
1161-
data_ptr.write(v.clone());
1162-
data_ptr = data_ptr.add(1);
1165+
if T::IS_COPY {
1166+
ptr::copy_nonoverlapping(v.as_ptr(), data_ptr, len3);
1167+
data_ptr = data_ptr.add(len3);
1168+
} else {
1169+
for v in v {
1170+
data_ptr.write(v.clone());
1171+
data_ptr = data_ptr.add(1);
1172+
}
11631173
}
11641174
}
11651175
}

0 commit comments

Comments
 (0)